0

Мне нужно получить данные из activeMQ, а затем передать их исполнителям, работающим в ThreadPoolExecutor.ActiveMQ и ThreadPoolExecutor, работающие вместе

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

Я могу просто заняться ждать до activeCount < poolSize. Но я был бы признателен за любое решение с некоторой асинхронной обработкой этого. Заранее спасибо.

+0

Я немного запутался. Мне кажется, что вы просто хотите, чтобы обработчик сообщения выполнял() задачу, и вам не нужно ни о чем беспокоиться. Задача будет поставлена ​​в очередь в случае необходимости с помощью TPE и выполнена после того, как исполнитель станет свободным для выполнения работы. Нет необходимости ждать, пока сообщение будет доступно, вы просто выталкиваете его из очереди сообщений в очередь исполнителя. – Gimby

+0

@Gimby, вы правы, но это требование, чтобы я не мог получить данные из постоянного ActiveMQ, пока не будет обеспечена комната для выполнения. –

+0

Это потому, что между временем, когда сообщение потребляется, и выполнение задачи не должно быть задержек? Его немного трудно представить себе аргументацию, и без надлежащей аргументации трудно определить, какие могут быть возможные решения. У меня есть ощущение, что это связано с тем, что не использует ThreadPoolExecutor, поскольку он предназначен для очереди. – Gimby

ответ

0

Вы можете попробовать это

final ThreadPoolExecutor executor=... 
new Thread(new Runnable(){ 
public void run(){ 
    while(true){ 
     if(executor.getActiveCount()<executor.getCorePoolSize()) 
      executor.execute(mq.get()); 
     } 
}).start(); 
+0

Это то, что я упомянул в последней строке. Это занятый подход ожидания, но я ищу подход, в котором я не постоянно проверяю наличие пула исполнителей. –

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