线程池里面的execute 和 submit 方法有什么区别?
目录
1. 返回值
2. 异常处理
3. 任务类型支持
4. 使用场景
示例代码
使用 execute
使用 submit
使用 submit 提交 Callable 任务
总结对比
选择建议
execute
和 submit
是 Java 线程池中用于提交任务的两种方法,它们的主要区别在于返回值、异常处理和任务类型支持。以下是它们的详细对比:
1. 返回值
-
execute
:-
无返回值(
void
)。 -
适用于不需要获取任务执行结果的场景。
-
-
submit
:-
返回一个
Future
对象,可以通过Future.get()
获取任务的执行结果。 -
适用于需要获取任务执行结果的场景。
-
2. 异常处理
-
execute
:-
如果任务执行过程中抛出未捕获的异常,线程会终止,异常会被传递给线程池的
UncaughtExceptionHandler
。 -
需要手动在任务内部捕获异常,否则异常会丢失。
-
-
submit
:-
如果任务执行过程中抛出异常,异常会被封装在
Future
对象中,调用Future.get()
时会抛出ExecutionException
。 -
可以通过
Future.get()
捕获并处理异常。
-
3. 任务类型支持
-
execute
:-
只接受
Runnable
类型的任务。 -
Runnable
任务没有返回值。
-
-
submit