2016-11-30 7 views
1

私はAsyncメソッド呼び出しを呼び出しています。方法createResjavax.ejb.Asynchronousです。java -eeで固定サイズの非同期呼び出しを行う

for (int i=0; i<100; i++) { 
    Future<Res> result = utils.createRes(stuff); 
} 

私はcreateResに呼ばれる3つのコールの最大があるようにしたいです。したがって、考え方は、単一のFutureが完了すると次のものに進むべきときです。したがって、ExecutorServiceとほとんど同じです。

このコードでは、ブロックすることなく1回目から3回ずつutils.createResを呼び出す必要があります。しかし、前のFutureのうちの1つがDONEになるまで、4回目の呼び出しを行うべきではありません。

注:私はJ2EEを使用しているため、外部スレッドサービスは使用するアドバイスではありません。

+0

4回目のコールが着信するとどうなりますか? –

+0

@SteveCテキストを更新しました。 Tx – dinesh707

+0

サービスへのアクセスを制限しようとしていますか? –

答えて

0

私はJMSキューを設定し、関連するMDBで使用されるスレッドプールのサイズを制限することで、この種の問題を解決しました。

ノードシステムが1つしかない場合は、Java EE javax.enterprise.concurrent. ManagedExecutorServiceを同様の方法で使用して、アプリケーションサーバーで提供されるサービスのスレッドプールサイズを再度設定することができます。

どのような種類のキューにタスクを送信してスレッドプールのサイズを制限して調整するだけです。

関連する問題