在 Java 中,线程池提供了两种提交任务的方法:submit()
和 execute()
。它们在功能上有一些区别。
submit()
方法:submit()
方法返回一个 Future
对象,可以用于获取任务的执行结果。submit()
方法能够捕获被任务抛出的异常,通过 Future
对象的 get()
方法来获取异常信息。execute()
方法:execute()
方法没有返回值,无法获取任务的执行结果。execute()
方法无法捕获任务抛出的异常,异常会被直接抛到线程的未捕获异常处理器。以下是一个使用 submit()
和 execute()
方法的简单示例:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class ThreadPoolExample {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(2);
// 使用 submit() 提交任务
Future<String> futureSubmit = executorService.submit(() -> {
Thread.sleep(2000);
return "Task submitted using submit() method.";
});
try {
System.out.println(futureSubmit.get()); // 获取任务执行结果
} catch (Exception e) {
e.printStackTrace();
}
// 使用 execute() 提交任务
executorService.execute(() -> {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task submitted using execute() method.");
});
executorService.shutdown();
}
}
在上述示例中,通过 submit()
提交的任务可以通过 Future
对象获取执行结果,而通过 execute()
提交的任务无法获取执行结果。根据具体的需求,选择适合的方法。如果需要获取执行结果或者捕获异常,使用 submit()
;如果不关心执行结果或者异常,使用 execute()
。