Вы можете использовать ThreadLocal .Это позволяет вам сохранить один экземпляр анализатора на поток.Таким образом, любой созданный экземпляр парсера никогда не будет использоваться из более чем одного потока.
Обычно он не должен создавать больше экземпляров, чем у процессоров * ядер, которые у вас есть.
Для меня это ~ 4-5 экземпляров (если я отключу Hyper Threading на моем четырехъядерном процессоре).
PS Не относится к StanfordNLP. Иногда реализации плохих классов содержат статические поля и модифицируют их без поточно-ориентированного способа.Общий подход безопасного распараллеливания для таких реализаций будет следующим:
- перемещение вычислительной части в отдельный процесс ;
- запуск (ЦП * ядер) числа процессов с вычислениями.
- использование IPC для связи между основными / фоновыми процессами.