小编典典

在 ExecutorService 的提交和 ExecutorService 的执行之间进行选择

all

如果返回值不是我关心的,我应该如何在 ExecutorService 的
submitexecute之间进行选择?

如果我同时测试两者,除了返回值之外,我没有看到两者之间的任何差异。

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

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

阅读 64

收藏
2022-06-30

共1个答案

小编典典

关于异常/错误处理存在差异。

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

另一方面,Throwable队列中的任务生成的 asubmit()将绑定ThrowableFuture调用 to
生成的submit()。调用get()Future会抛出一个ExecutionException原始Throwable的作为它的原因(可以通过调用getCause()来访问ExecutionException)。

2022-06-30