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>?