在 Java 中,ExecutorService 是 java.util.concurrent 包提供的线程池框架,用于高效地执行异步任务。下面从基本用法 → 提交任务 → 关闭线程池 → 常见示例逐步说明。
常用工厂方法(来自 Executors):
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
// 固定线程数
ExecutorService executor = Executors.newFixedThreadPool(4);
// 单线程
ExecutorService single = Executors.newSingleThreadExecutor();
// 可缓存线程池
ExecutorService cached = Executors.newCachedThreadPool();
⚠️ 生产环境推荐使用
ThreadPoolExecutor手动构造,避免资源失控。
executor.execute(() -> {
System.out.println("任务执行中:" + Thread.currentThread().getName());
});
特点:
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
Callable<String> task = () -> {
Thread.sleep(1000);
return "任务完成";
};
Future<String> future = executor.submit(task);
获取结果:
try {
String result = future.get(); // 阻塞等待
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
List<Callable<String>> tasks = List.of(
() -> "任务1",
() -> "任务2"
);
List<Future<String>> futures = executor.invokeAll(tasks);
String result = executor.invokeAny(tasks);
executor.shutdown(); // 不再接受新任务
等待任务结束:
try {
if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
executor.shutdownNow(); // 强制关闭
}
} catch (InterruptedException e) {
executor.shutdownNow();
}
public class ExecutorDemo {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newFixedThreadPool(2);
Future<Integer> future = executor.submit(() -> {
Thread.sleep(500);
return 42;
});
System.out.println("结果:" + future.get());
executor.shutdown();
}
}
✅ 使用线程池而不是 new Thread()
✅ 控制线程数量,避免 OOM
✅ 一定要 shutdown()
✅ 使用 Future 处理异常和结果
如果你愿意,我可以:
你想深入哪一块?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。