Как правильно использовать ExecutorService на сервере?
Добрый день.
Про ExecutorService много разных статей, но большинство из них описывают пулы потоков либо в вакууме, либо в stand alone приложении, но не упоминается про использование на сервере приложений.
Подскажите, пожалуйста, практики использования ExecutorService на сервере приложений (использую JBoss): в какой момент создавать, как организовать конкурентный доступ к пулу (как его спрятать в сервисе с бизнес логикой), кто и в какой момент должен выключать пул, etc?
UPD: используем java ee 6, поэтому с ManagedExecutorService подружиться не сможем.
В JBoss есть встроенный ThreadPool, который использовался для его для своей работы. Кошерным путем было бы выцепить этот пул, например, через JMX и подложить его для использования в ExecutorService. В таком случае, управление пулом осталось бы на JBoss, а вы бы просто сабмитили в него свои таски.
Идея интересная, только я не смогу ограничивать количество моих тасков в работе, т.е. просто могу завалить пул jbossa своими тасками в ущерб общему функционалу.
Не совсем согласен. У вас так и так будет некий пул потоков. В одном случае он конфигурится в коде (например пул из 10 потоков под Executor), а в другом он настраивается конфигурацией jboss. В итоге jvm будет оперировать +- равным числом потоков, но настройку размера пула можно свести к одной конфигурации.