如果返回值与我无关,我应该如何选择 ExecutorService的 submitexecute

如果同时测试两者,则除了返回的值外,我看不到其他任何差异。

ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
threadExecutor.execute(new Task());
ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
threadExecutor.submit(new Task());

最佳答案

关于异常/错误处理有区别。

execute()排队并生成一些Throwable的任务将导致运行该任务的UncaughtExceptionHandlerThread被调用。如果未安装任何自定义处理程序,则将调用默认的UncaughtExceptionHandler(通常将Throwable堆栈跟踪打印到System.err)。

另一方面,由与Throwable排队的任务生成的submit()Throwable绑定(bind)到对Future的调用所生成的submit()。在该get()上调用Future将引发一个带有原始ExecutionException作为其原因的Throwable(可通过在getCause()上调用ExecutionException进行访问)。

09-27 21:30