2012-10-21 39 views
1

我想提交一個任務到Java中的ExecutorService。它需要一個Callable,它允許拋出一個異常,或者它需要一個Runnable。我的用例是愚蠢的:我想安排一個任務,拋出一個異常,但是是一個無效的方法。因此,我無法使用Callable或Runnable,因爲方法定義與我的用例不匹配。我還希望我的未來能夠在提交後收到的未來中傳播。有任何想法嗎?java execturorService - 提交任務和捕獲異常

回答

3

您可以使用Callable<Void>。顯然你不能實例化一個Void對象,但是隻返回null

Future<Void>起,仍然可以撥打get,丟棄null的返回值。它將重新拋出任何異常,如ExecutionException

1

您可以使用Callable<Void>(或任何其他類參數),並始終返回null,在這種情況下Future.get包裝和重新拋出由任務拋出的任何異常,或使用Callable<Throwable>和你的任務的主體是

try { 
    // do stuff 
} catch(Throwable t) { 
    return t; 
} 
return null; 

在這種情況下Future.get回報例外。在這兩種情況下,成功的任務將從其Future.get返回null