我遇到了一個關於ThreadPoolExecutor
的問題。ThreadPoolExecutor - 提交和執行方法之間的區別?
寫了一些代碼後,我發現submit()
方法會吃掉程序拋出的RuntimeException
,但方法會重新拋出RuntimeException。我想知道這個的原因。
我最近讀了ThreadPoolExecutor
的源代碼,知道線程池的原理。 現在我明白方法是如何執行的,但我無法理解submit()
方法是如何執行的。我只知道submit()
方法將包裹在FutureTask
的Runnable
或Callable
並調用方法:
public Future submit(Runnable runnable)
{
if(runnable == null)
{
throw new NullPointerException();
} else
{
RunnableFuture runnablefuture = newTaskFor(runnable, null);
execute(runnablefuture);
return runnablefuture;
}
}
所以,我的問題是:如何ThreadPoolExecutor
執行FutureTask
和爲什麼吃了RuntimeException
?
的get方法一個很好的解釋是這裏http://stackoverflow.com/questions/3929342/choose-between-executorservices-submit-and-executorservices-execute – Tala
我知道submit()方法會將異常綁定到Future,但在閱讀ThreadPoolExecutor的源代碼之後,我沒有找到它所做的地方?所以我想知道submit()方法如何將異常綁定到Future? –
回答說明 – Tala