0

私はactiveMQからデータを取り出し、それをThreadPoolExecutorで実行されているエグゼキュータに渡す必要があります。ActiveMQとThreadPoolExecutorが連携しています

問題は、プール内に少なくとも1つのスレッドがアイドル状態にあり、このタスクを実行する準備ができるまで、キューから次のデータをフェッチする必要はありません。

activeCount < poolSizeまで待つだけです。しかし、私はこれのいくつかの非同期処理の任意のソリューションを感謝します。前もって感謝します。

+0

を試すことができます。メッセージハンドラにタスクをexecute()させてから、何も心配する必要がないように思えます。タスクは、必要に応じて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

これは私が最後の行で述べたことですが、これは忙しい待合ですが、エグゼキュータプールの可用性を継続的にチェックしていないアプローチを探しています。 –

関連する問題