在 Java 中,ExecutorService 是 java.util.concurrent 包提供的线程池接口,用来提交和执行任务。提交任务主要有以下几种方式和对应方法。
execute(Runnable) —— 无返回值用于提交 不需要返回结果 的任务。
ExecutorService executor = Executors.newFixedThreadPool(2);
executor.execute(() -> {
System.out.println("任务执行中");
});
特点:
Runnablesubmit(Runnable) —— 有 Future,但结果为 nullFuture<?> future = executor.submit(() -> {
System.out.println("Runnable 任务");
});
future.get() 判断是否执行完成get() 返回 nullsubmit(Callable<T>) —— 有返回值(最常用)用于需要返回结果的任务。
Callable<String> task = () -> {
return "任务结果";
};
Future<String> future = executor.submit(task);
String result = future.get(); // 阻塞等待结果
submit(Runnable, T result) —— 自定义返回结果Future<String> future = executor.submit(() -> {
System.out.println("执行任务");
}, "完成");
String result = future.get(); // 返回 "完成"
invokeAll(等待所有任务完成)List<Callable<String>> tasks = List.of(
() -> "任务1",
() -> "任务2"
);
List<Future<String>> futures = executor.invokeAll(tasks);
invokeAny(只要有一个完成就返回)String result = executor.invokeAny(tasks);
Future<String> future = executor.submit(() -> "结果");
try {
String r = future.get(); // 阻塞
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
executor.shutdown(); // 等待已有任务执行完
// executor.shutdownNow(); // 立即中断
ExecutorService executor = Executors.newFixedThreadPool(2);
Future<Integer> future = executor.submit(() -> {
Thread.sleep(1000);
return 10;
});
System.out.println(future.get());
executor.shutdown();
| 方法 | 是否返回值 | 适用场景 |
|---|---|---|
| execute | 否 | 简单异步任务 |
| submit(Runnable) | 否 | 需要感知完成 |
| submit(Callable) | 是 | 需要结果 |
| invokeAll / invokeAny | 是 | 批量任务 |
如果你愿意,我也可以讲 线程池参数配置 或 Spring 中如何使用线程池。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。