【发布时间】:2013-06-20 04:24:36
【问题描述】:
我遇到了关于ThreadPoolExecutor 的问题。
写了一些代码后发现submit()方法会吃掉程序抛出的RuntimeException,但是execute()方法会重新抛出RuntimeException`。我想知道这是什么原因。
最近看了ThreadPoolExecutor的源码,知道了线程池的原理。
现在我明白了execute() 方法是如何执行的,但是我不明白submit() 方法是如何执行的。我只知道submit()方法会将Runnable或Callable包裹在FutureTask中并调用execute()方法:
public Future submit(Runnable runnable)
{
if(runnable == null)
{
throw new NullPointerException();
} else
{
RunnableFuture runnablefuture = newTaskFor(runnable, null);
execute(runnablefuture);
return runnablefuture;
}
}
那么,我的问题是:ThreadPoolExecutor 是如何执行FutureTask 的,为什么RuntimeException 被吃掉了?
【问题讨论】:
-
这里有一个很好的解释stackoverflow.com/questions/3929342/…
-
我知道submit()方法会将异常绑定到Future,但是看了ThreadPoolExecutor的源码,没找到它做的地方?所以我想知道 submit() 方法是如何将异常绑定到 Future 的?
-
回答了解释
标签: java threadpool