2012-05-22 23 views
4

從主線程調用程序線程:如何發出信號的ExecutorService已完成任務

executorService.submit(new Runnable() { ... }); 

現在當了Runnable完成執行,有沒有Java標準的信令程序線程,它已完成執行的方式,而不是創建一個新的接口/偵聽器類?

如果信號可以從調用者線程發出,則爲獎勵點。

回答

4

submit返回Future,提交線程可以調用get阻塞,直到任務完成。

Future<?> future = executor.submit(new Runnable() { ... }); 
future.get(); 
+0

如果我使用future.get(),調用者線程必須有意識地調用它來查看它是否完成。我的應用程序中的調用者線程恰好是一個UI線程,它不能有任何阻塞操作,但它需要在刷新視圖時接收某種更新。 – garbagecollector

+0

您需要將任務提交到UI線程才能在完成時運行。 UI線程的事件循環將選取任務並運行它。或者你可以在UI線程中安排一個循環任務來定期輪詢未來,直到'isDone'返回true。 –

3

您可以阻止返回的Future對象的get()方法或輪詢其上的isDone()方法。或者,你可以使用谷歌番石榴庫有ListenableFuture

+0

我很確定get()阻塞直到計算完成。 –

0

我不確定你的實現和多少個線程將同時運行,所以這可能不起作用。有一件事你可以看看,就是通過調用一個知道如何更新所需的UI組件的方法來讓runnable自己發出信號。

相關問題