У меня есть веб-сервис, который выполняет несколько небольших вычислений, прежде чем вернуть результат. Я хочу использовать ExecutorService
, предоставленный Executors.newFixedThreadPool()
, как способ реализации шаблона Master - Worker (т.е. вызов invokeAll
и позволить потоку дождаться завершения всех результатов). В идеале все потоки веб-службы используют одну и ту же службу-исполнитель, поэтому им не нужно создавать собственный пул потоков, и они могут просто использовать один большой пул, который использует все время обработки системы.
Вопросы, которые я имею с этим подходом:
- Безопасно ли получить доступ к функции
invokeAll
из нескольких потоков.
- будет ли служба исполнителя просто обрабатывать запросы последовательно (т. Е. Сначала все задачи из потока 1, затем задачи для потока
- есть ли способ, скажем, 10 рабочих потоков, и максимальное количество доступных потоков зависит от количества поступающих запросов, так что у нас есть 1 запрос, он использует все 10 потоков для этого запроса. Если у вас есть 2 запроса, он разделяет их на 5 потоков на запрос и т. Д.