У меня был один и тот же вопрос для одного из наших сценариев, когда я вернулся, и прочитал их Javadoc, как упомянуто здесь для контейнера сервлета.Извлечение Javadoc,
Семантика вызова
Когда вызывается метод {@link #execute (java.util.concurrent.Callable)}, процесс сервлетаПриложение изменяет контекстный загрузчик классов текущего потока на загрузчик классов, который загрузил предоставленный приложением подкласс этого класса.Это позволяет
- обработчику процессов разрешать реализации {@link JavaDelegate} с помощью загрузчика классов приложения процесса
Это в значительной степени объясняет все, что вы хотитезнаю, так как поведение очень похоже на работу веб-контейнера.Если вы хотите узнать, как ведут себя другие реализации контейнеров, вы можете проверить соответствующие Javadoc классов в этом пакете .
Чтобы ответить на ваш вопрос:
Да .Потоковая безопасность требуется для общих ресурсов, к которым JavaDelegate
получает доступ в том же приложении процесса.Согласно документации (см. Ниже) они создают новый экземпляр делегата каждый раз при выполнении задачи.
Примечание!
Каждый раз, когда выполняется ссылка на класс делегирования, создается отдельный экземпляр этого класса.Это означает, что каждый раз, когда выполняется действие, будет использоваться другой экземпляр класса для вызова execute (DelegateExecution).
Следовательно, в любое время может быть активно запущено много экземпляров делегата из-замногократный вызов Process Definitions
.Таким образом, если они обращаются к общему ресурсу, то их необходимо синхронизировать (поточно-ориентированный), потому что эти общие ресурсы ( static или singleton ) являются локальными для приложения процессаи загружается соответствующим загрузчиком классов приложения в соответствии с приведенным выше Семантика вызова Javadoc.
Надеюсь, это поможет.