3 回答

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

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