2016-11-30 51 views
1

我有一個調用Async方法調用。方法createResjavax.ejb.Asynchronous如何做java-ee上的固定大小異步調用

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

我希望這是最大的3個電話叫上createRes。所以這個想法是當一個Future完成它應該去下一個。所以它幾乎就像ExecutorService。

至於這個代碼,它應該調用utils.createRes前三次一個接一個沒有阻塞。但是,第四次呼叫不應該進行,直到之前的Future之一是完成

注意:我使用的是J2EE,所以外部線程服務不是要使用的建議。

+0

當第4次來電時,您預期會發生什麼? –

+0

@SteveC我更新了文字。 Tx – dinesh707

+0

您是否試圖限制對服務的訪問? –

回答

0

我已經通過設置JMS隊列並限制相關MDB使用的線程池的大小解決了這類問題。

如果您只有一個節點系統,那麼現在您可以以類似的方式使用Java EE javax.enterprise.concurrent. ManagedExecutorService,再次在應用程序服務器中配置所提供服務的線程池大小。

無論哪種方式,你只是提交任務到某種類型的隊列,並通過限制線程池的大小來限制它。