2017-01-27 35 views
1

我正在使用JerseyClient對http服務器進行異步調用,並直接創建Futures來存儲響應。這些甚至可以是批次調用,在這種情況下,我創建了期貨清單。在沒有ExecutorService或FutureTask的情況下創建期貨

這是現在完美的工作,但我擔心CPU利用率和線程數,因爲我不使用Executor服務創建任何線程池,也不使用FutureTask創建期貨。

我如何構建每個未來一小段代碼:

Future<Response> response = requestBuilder.async().get(); 

是這些問題是否有效?繼續採用這種方法可以嗎?這種方法不會擴展嗎?

另一個問題是get()可能永遠不會在這些未來的某些產品上執行?這會導致產卵線程永遠不會被殺死,因爲在這些線程上運行的期貨不會執行get()或cancel()()操作嗎?

回答

0

控制應用程序創建的threads的號碼總是比較好,因此在使用Jersey async API呼叫REST API時,應該限制創建的號碼threads

下面的代碼可用於async API控制由jersey client創建的threads最大數量 -

ClientConfig cc = new ClientConfig(); 
    cc.property(ClientProperties.ASYNC_THREADPOOL_SIZE , 10); 

    Client client = ClientBuilder.newClient(cc); 

相關的未來實例get()方法調用另一點,get()方法僅僅是一個阻塞方法,這將使你的current thread等待future task在這種情況下爲response接收完成,它不會影響執行threads。因此,如果您沒有撥打get()cancel()的迴應Future實例,則不應該有任何問題。

相關問題