为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

翻翻过去那场雪 2019-11-22 12:48:54
如果返回值与我无关,我应该如何在ExecutorService的 Submit或execute之间进行选择?如果同时测试两者,则除了返回的值外,我没有看到其他任何区别。ExecutorService threadExecutor = Executors.newSingleThreadExecutor();threadExecutor.execute(new Task());ExecutorService threadExecutor = Executors.newSingleThreadExecutor();threadExecutor.submit(new Task());
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

异常/错误处理有所不同。


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


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


查看完整回答
反对 回复 2019-11-22
?
PIPIONE

TA贡献1829条经验 获得超9个赞

取自Javadoc:


方法通过创建并返回可用于取消执行和/或等待完成的{@link Future}来submit扩展基本方法{@link Executor#execute}。


就个人而言,我更喜欢使用execute,因为它听起来更具声明性,尽管这实际上是个人喜好问题。


提供更多信息:在实现的情况下,ExecutorService调用返回的核心实现Executors.newSingleThreadedExecutor()是ThreadPoolExecutor。


该submit呼叫通过其母公司提供的AbstractExecutorService所有内部调用执行。ThreadPoolExecutor直接由execute覆盖/提供。


查看完整回答
反对 回复 2019-11-22
  • 3 回答
  • 0 关注
  • 798 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信