ExecutorService.submit()与Executor.execute()的区别

Posted 云里雾里的测试

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ExecutorService.submit()与Executor.execute()的区别相关的知识,希望对你有一定的参考价值。

相同之处:

1. execution.submit和execute方法均可以像线程池中提交一个任务,让线程池来异步执行这个任务;

2. 两个方法均可以接受Runnable类型的任务;

3. 从ExecutorService接口中均可以调用submit和execute方法,但是submit方法是在ExecutorService接口中定义的,而execute方法是在Executor接口中定义的;

不同之处:

1. submit()可以接受Runnable和Callable任务,但execute()只能接受Runnable任务;

2. submit方法的返回值是一个Future,而execute方法的返回值是void;

3. 对于异常的处理,使用submit方式提交的任务若在执行的过程中抛出了异常的话,异常信息会被吃掉(在控制台中看不到),需要通过Future.get方法来获取这个异常;使用execute方式提交的任务若在执行的过程中出现异常的话,异常信息会被打印到控制台;

什么时候使用这两个方法:

1. 若需要获取异步执行任务的返回值的话,使用submit方法;若仅仅是让一个任务在线程池中异步执行,使用execute方法;

以上是关于ExecutorService.submit()与Executor.execute()的区别的主要内容,如果未能解决你的问题,请参考以下文章

executorService.submit(Runnable) 返回的未来对象是不是包含对可运行对象的任何引用?

为啥 ExecutorService.submit(Runnable task) 返回 Future<?> 而不是 Future<Void>?

《Java并发编程实战》第六章 任务运行 读书笔记

Guava Future

157-模拟高并发代码

双重检测机制解决缓存穿透问题