2012-12-10 16 views
5

我正在向ExecutorService提供線索。如何注意父線程的異常?

這些線程操作的一些數據,如果有衝突,數據對象拋出一個異常,這是由矛盾的線索,進而中止和不完整的執行捕獲。

當發生這種情況時,中止線程需要在隊列中被放回,並反饋到執行者。

如何判斷是否從父線程引發異常?

回答

11

當你submit()上一個任務ExecutorService你得到一個未來的結果。執行完成後,您可以在未來致電get()。如果適用,這將返回結果,或者如果原始任務投擲了一個,它將拋出一個ExecutionException。如果你想要真正的異常對象,你可以做getCause()

另外請注意,你要放一個Task返回到服務,該任務在Thread還沒有真正終止跑(剛好趕上了異常,並正在等待一個新的)。

下面是一個例子使用(你可以使用Runnable,如果你不喜歡的結果)。

Callable<String> myCallable = ...; 
Future<String> future = myExector.submit(myCallable); 

// Do something else until myCallable.isDone() returns true. 
try { 
    String result = future.get(); 
}catch(ExecutionException e){ 
    // Handle error, perhaps create new Callable to submit. 
} 
+1

我對Java很新。你能用這些呼叫畫出一個準系統的例子嗎? – Aerovistae

+0

添加了一個示例 – Thirler