ExecutorService 是 Java 中用于管理线程池、异步执行任务的核心接口,适合“需要并发执行多个任务,但又不想手动管理线程生命周期”的场景。
下面从适合场景、不适合场景、常见用法几个角度说明。
例如:
✅ 优势:
避免频繁创建/销毁线程,复用线程,提升性能。
例如:
✅ 可通过 FixedThreadPool / Semaphore 控制并发度。
例如:
executor.submit(() -> sendEmail());
使用 Callable + Future:
Future<Integer> future = executor.submit(() -> 1 + 1);
Integer result = future.get();
适合:
例如:
List<Future<?>> futures = new ArrayList<>();
for (Task t : tasks) {
futures.add(executor.submit(t));
}
// 等待全部完成
直接用 new Thread() 或同步执行更简单。
线程池容易被占满,应使用专用线程。
线程池有调度开销,实时系统更适合:
应使用:
ScheduledExecutorService@Scheduled| 场景 | 线程池 |
|---|---|
| CPU 密集型 | FixedThreadPool(n) |
| IO 密集型 | CachedThreadPool / 自定义 |
| 定时任务 | ScheduledThreadPool |
| 单线程顺序执行 | SingleThreadExecutor |
✅ 手动创建线程池(不推荐 Executors 快捷方法):
ExecutorService executor = new ThreadPoolExecutor(
10, 50, 60L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(1000),
new ThreadPoolExecutor.CallerRunsPolicy()
);
✅ 使用完必须 shutdown()
ExecutorService 适合“多任务、可并发、可异步、需控并发数”的业务场景。
如果你有具体业务(比如接口并发、批量任务、IO 密集),我可以帮你选线程池参数。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。