2008-11-27 6 views
1

У меня есть веб-сервис, который выполняет несколько небольших вычислений перед возвратом результата. Я хочу использовать ExecutorService, предоставленный Executors.newFixedThreadPool(), как способ реализации шаблона Master-Worker (то есть вызвать invokeAll и дать потоку ждать завершения всех результатов). В идеале все потоки webservice используют одну и ту же службу-исполнитель, поэтому им не все должны создавать свой собственный пул потоков, и они могут просто поделиться одним большим пулом, который использует все время обработки системы.Может ли java fixedThreadPool использоваться несколькими потоками

Вопросы я с этим подходом:

  • это безопасно для доступа к функции invokeAll из нескольких потоков.
  • будет обслуживать исполнителей просто обрабатывать запросы последовательно (т.е. сначала все задачи из потока 1, а затем для потока
  • есть способ сказать 10 рабочих потоков и иметь максимальное количество потоков зависит от количество запросов на вход, так что скажем, у нас есть 1 запрос, он использует все 10 потоков для этого запроса. Если у вас есть 2 запроса, он разбивает их по 5 потоков на запрос и т. д.

ответ

1

Я бы сказал, invokeAll. Каждый запрос вызывает ExecutorService.submit для каждой из подзадач, которые вы хотите выполнять параллельно. Пул потоков будет обрабатывать планирование задач (это то, для чего оно предназначено для!).

И да, если вы используете Executors.newFixedThreadPool(), каждый запрос помещается в очередь, поэтому они обрабатываются последовательно.

0

Я думаю, вы должны использовать Semaphore, а затем invokeAll()

2

При работе на сервере Java EE, вы не должны создавать темы по своему усмотрению. Я понимаю, что это не очень хорошая ситуация, поэтому вам следует исследовать альтернативы в зависимости от используемого вами сервера приложений. Если это WebSphere или Weblogic, вы должны использовать WorkManager спецификации commonj, которая обеспечивает точную функциональность, которую вы хотите. Существует также реализация для JBoss.

Вы должны посмотреть на создание собственных потоков в управляемой среде в качестве последнего средства.

 Смежные вопросы

  • Нет связанных вопросов^_^