📅  最后修改于: 2023-12-03 14:42:14.064000             🧑  作者: Mango
Java 通过 ExecutorService
接口提供了一个方便的线程池管理工具,其中 execute()
和 submit()
是两个常用的方法。两者都可以用来将任务提交给线程池执行,但是它们之间有一些区别。本文就来介绍一下它们之间的区别。
execute(Runnable command)
方法可以用来提交一个实现了 Runnable
接口的任务给线程池执行。该方法没有返回值,也没有办法知道任务是否执行成功。这个方法主要用于那些对任务的返回值不关心的情况下。
下面是一个例子:
public class Test {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
executor.execute(() -> {
System.out.println("Hello World");
});
executor.shutdown();
}
}
submit(Runnable task)
和 execute(Runnable command)
很相似,都是提交一个实现了 Runnable
接口的任务给线程池执行,但是 submit()
方法有返回值。返回值是一个 Future
对象,可以通过它来判断任务是否执行成功,并且可以获取任务返回的结果。
下面是一个例子:
public class Test {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
Future<?> future = executor.submit(() -> {
System.out.println("Hello World");
return "Hello Future";
});
try {
String result = (String) future.get();
System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
executor.shutdown();
}
}
execute()
和 submit()
方法都可以用来提交任务给线程池执行。如果对任务的返回值不关心,或者无法知道任务是否成功执行,那么就可以使用 execute()
方法。如果对任务的返回值感兴趣,那么就使用 submit()
方法。