猿问

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

如果返回值与我无关,我应该如何在ExecutorService的 Submit或execute之间进行选择?


如果同时测试两者,则除了返回的值外,我没有看到其他任何区别。


ExecutorService threadExecutor = Executors.newSingleThreadExecutor();

threadExecutor.execute(new Task());

ExecutorService threadExecutor = Executors.newSingleThreadExecutor();

threadExecutor.submit(new Task());


翻翻过去那场雪
浏览 799回答 3
3回答

米琪卡哇伊

异常/错误处理有所不同。与排队的任务execute()是产生一些Throwable将导致UncaughtExceptionHandler对Thread正在运行的任务被调用。如果未安装任何自定义处理程序,则将调用默认值UncaughtExceptionHandler(通常将Throwable堆栈跟踪打印到)System.err。另一方面,Throwable由排队的任务所生成的submit()将绑定Throwable到Future从调用生成的submit()。调用get()时,Future将引发一个ExecutionException带有原始Throwable原因的(可通过调用getCause()进行访问ExecutionException)。

PIPIONE

取自Javadoc:方法通过创建并返回可用于取消执行和/或等待完成的{@link Future}来submit扩展基本方法{@link Executor#execute}。就个人而言,我更喜欢使用execute,因为它听起来更具声明性,尽管这实际上是个人喜好问题。提供更多信息:在实现的情况下,ExecutorService调用返回的核心实现Executors.newSingleThreadedExecutor()是ThreadPoolExecutor。该submit呼叫通过其母公司提供的AbstractExecutorService所有内部调用执行。ThreadPoolExecutor直接由execute覆盖/提供。
随时随地看视频慕课网APP

相关分类

Java
我要回答