我发现有两种方法(submit和execute)可以将一个Runnable添加到线程池中,它们之间的区别是什么?
我发现有两种方法(submit和execute)可以将一个Runnable添加到线程池中,它们之间的区别是什么?
区别在于execute
不返回Future
,因此您无法使用它等待Runnable
的完成并获取任何它抛出的异常。
submit(...)
方法是在ExecutorService
接口中引入的执行器框架扩展。
submit(...)
与execute(Runnable)
的主要区别在于,submit(...)
可以接受一个Callable<V>
对象(而execute()
只能接受一个Runnable
对象),并返回一个Future<V>
实例,您可以稍后在调用程序中异步检索结果(可能会阻塞,直到Callable
执行完)。
Future
还允许您获取由Runnable
抛出的异常。 - axtavtsubmit
,线程的未捕获异常处理程序将永远不会被调用,而对于execute
,它将被调用。 - Dennie