Java 中 ExecutorService 的 execute() 和 submit() 方法的区别

2025年3月17日 | 阅读 3 分钟

ExecutorService.execute()和submit()方法都用于将任务提交给ExecutorService对象。execute()方法接受一个Runnable任务,而submit()方法接受Runnable和Callable任务。execute()方法没有返回值,而submit()方法返回一个Future对象。Future对象可用于获取任务结果或检查任务是否已完成执行。

submit()方法通常比execute()方法更灵活。如果您需要获取任务的结果,或者需要检查任务是否已完成执行,则应使用submit()方法。但是,如果您不需要任务的结果,或者不需要检查任务是否已完成执行,则可以使用execute()方法。

Difference between ExecutorService execute() and submit() method in Java

Execute 方法

execute()方法是Java Executor接口的一部分。它用于将任务提交给Executor对象。Executor接口是一个泛型接口,它接受Runnable任务作为参数。execute()方法不返回任何值。任务可以是任何实现Runnable接口的对象。

execute()方法是非阻塞方法。“execute()”方法不等待任务完成执行。execute()方法将任务提交给Executor对象,然后返回。Executor对象稍后将执行该任务。

execute()方法对于提交不需要返回任何值的任务很有用。例如,您可以使用execute()方法提交一个将消息打印到控制台的任务。

文件名: ExecuteExample.java

输出

Hello, world!

Submit 方法

submit()方法用于Java的ExecutorService接口。“submit()”方法用于将任务提交给ExecutorService以进行异步执行。使用submit()方法时,您可以提供Callable对象作为输入,它将返回一个Future对象。Future对象可用于获取任务结果或检查任务是否已完成执行。

submit()方法是Java中异步执行的强大工具。submit()方法允许将任何任务提交给ExecutorService。submit()方法还可用于获取任务结果或检查任务是否已完成执行。

文件名: SubmitExample.java

输出

Hello, world!

ExecutorService的execute()和submit()方法的区别

区别execute() 方法submit() 方法
方法声明声明于 Executor 接口声明于 ExecutorService 接口
任务接受只接受 Runnable 任务接受 Runnable 和 Callable 任务
返回值VoidFuture 对象
结果检索没有直接获取结果的方法Future 对象提供对任务结果的访问
异常处理异常由未捕获的异常处理器处理,或默认处理器将堆栈跟踪打印到 System.err异常被捕获,并且可以通过 Future 对象的 get() 来检索,它将异常包装在 ExecutionException 中
任务取消没有明确取消任务的方法Future 对象通过 cancel() 提供取消功能
任务完成没有任务完成的明确指示Future 对象提供检查任务是否完成 (isDone()) 和等待完成 (get()) 的方法