submit方法和execute方法在ThreadPoolExecutor中有什么区别?

35

我发现有两种方法(submit和execute)可以将一个Runnable添加到线程池中,它们之间的区别是什么?

3个回答

39

区别在于execute不返回Future,因此您无法使用它等待Runnable的完成并获取任何它抛出的异常。


4
Future 还允许您获取由 Runnable 抛出的异常。 - axtavt
@axtavt:没错,我想我也应该提一下。 - ColinD
2
还值得注意的是,由于异常是Future返回值的一部分,因此对于submit,线程的未捕获异常处理程序将永远不会被调用,而对于execute,它将被调用。 - Dennie

16

submit(...)方法是在ExecutorService接口中引入的执行器框架扩展。

submit(...)execute(Runnable)的主要区别在于,submit(...)可以接受一个Callable<V>对象(而execute()只能接受一个Runnable对象),并返回一个Future<V>实例,您可以稍后在调用程序中异步检索结果(可能会阻塞,直到Callable执行完)。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接