ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Java 线程池中 submit() 和 execute() 方法有什么区别?

2026/9/11 0:50:48 拓冰建站 浏览量
Java 线程池中 submit() 和 execute() 方法有什么区别?

Java 线程池中 submit() 和 execute() 方法有什么区别?

在 Java 中,ExecutorService 接口是用于管理和执行线程的框架,它定义了两个用于提交任务的方法:submit()execute()。这两种方法有一些区别:

  1. 返回值

    • submit() 方法接受 CallableRunnable 任务,并返回一个 Future 对象,可以用于获取任务的执行结果或取消任务的执行。

    • execute() 方法接受 Runnable 任务,但它没有返回值,因此无法获取任务的执行结果。

  2. 异常处理

    • submit() 方法可以捕获任务执行过程中抛出的异常,并通过 Future 对象的 get() 方法抛出,从而实现对异常的处理。

    • execute() 方法无法捕获任务执行过程中的异常,因为它没有返回值。

下面是一个简单的示例,演示了 submit()execute() 的用法:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;public class SubmitVsExecuteExample {public static void main(String[] args) {ExecutorService executorService = Executors.newSingleThreadExecutor();// 使用 submit() 提交 Callable 任务Future<String> future = executorService.submit(new MyCallable());try {String result = future.get();System.out.println("Submit Result: " + result);} catch (Exception e) {e.printStackTrace();}// 使用 execute() 提交 Runnable 任务executorService.execute(new MyRunnable());executorService.shutdown();}static class MyCallable implements Callable<String> {public String call() throws Exception {TimeUnit.SECONDS.sleep(2);return "Callable task completed";}}static class MyRunnable implements Runnable {public void run() {System.out.println("Runnable task completed");}}
}

在上述示例中,submit() 方法用于提交 Callable 任务,通过 Future 对象获取任务的执行结果。而 execute() 方法用于提交 Runnable 任务,但无法获取任务的执行结果。这两者的选择取决于是否需要获取任务的执行结果。