使用ThreadPoolExecutor提交和执行方法有什么区别

vir*_*sir 31 java multithreading

我发现有两种方法(提交和执行)将Runnable添加到线程池中,有什么区别?

Col*_*inD 34

区别在于execute不返回a Future,所以你不能等待完成Runnable并获得它使用它抛出的任何异常.

  • `Future`还允许你获得`Runnable`抛出的异常. (4认同)
  • 另外值得注意的是,由于异常是 Future 返回值的一部分,线程的未捕获异常处理程序永远不会被“提交”调用,而“执行”则会被调用。 (2认同)

Vic*_*kin 16

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

它的主要区别execute(Runnable)在于submit(...)可以接受一个Callable<V>(而execute()只接受Runnable)并返回一个实例Future<V>,稍后你可以在调用者中使用它来异步检索结果(可能阻塞直到完成的计算Callable完成).