如果返回值与我无关,我应该如何选择 ExecutorService的 submit或execute?
如果同时测试两者,则除了返回的值外,我看不到其他任何差异。
ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
threadExecutor.execute(new Task());
ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
threadExecutor.submit(new Task());
最佳答案
关于异常/错误处理有区别。
与execute()
排队并生成一些Throwable
的任务将导致运行该任务的UncaughtExceptionHandler
的Thread
被调用。如果未安装任何自定义处理程序,则将调用默认的UncaughtExceptionHandler
(通常将Throwable
堆栈跟踪打印到System.err
)。
另一方面,由与Throwable
排队的任务生成的submit()
将Throwable
绑定(bind)到对Future
的调用所生成的submit()
。在该get()
上调用Future
将引发一个带有原始ExecutionException
作为其原因的Throwable
(可通过在getCause()
上调用ExecutionException
进行访问)。