在 Java 中,Executor(执行器) 是 java.util.concurrent 包中用于管理线程执行任务的框架。通常我们不会直接实现 Executor 接口,而是使用 Executors 工具类 或 ThreadPoolExecutor 来创建线程池(执行器)。
下面按常见方式给你介绍如何创建和使用 Executor。
Executors 提供了几种常用的线程池创建方式。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Demo {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
executor.execute(() -> {
System.out.println("任务执行中:" + Thread.currentThread().getName());
});
executor.shutdown();
}
}
ExecutorService executor = Executors.newSingleThreadExecutor();
ExecutorService executor = Executors.newCachedThreadPool();
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.Executors;
ScheduledExecutorService executor = Executors.newScheduledThreadPool(3);
executor.schedule(() -> {
System.out.println("延迟执行");
}, 2, java.util.concurrent.TimeUnit.SECONDS);
Executors 在某些场景下可能导致 OOM(如 newCachedThreadPool),所以生产环境推荐手动创建。
import java.util.concurrent.*;
public class Demo {
public static void main(String[] args) {
ThreadPoolExecutor executor = new ThreadPoolExecutor(
2, // 核心线程数
5, // 最大线程数
60L, // 空闲线程存活时间
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(10), // 任务队列
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
);
executor.execute(() -> System.out.println("自定义线程池"));
executor.shutdown();
}
}
Executor:只有 execute(Runnable)ExecutorService:扩展自 Executor,支持:
submit()(有返回值)shutdown()shutdownNow()Future<?> future = executor.submit(() -> {
return 1 + 1;
});
✅ 学习/简单使用:Executors.newFixedThreadPool()
✅ 生产环境:手动 ThreadPoolExecutor
✅ 定时任务:ScheduledExecutorService
如果你是 Spring 项目,也可以直接用 @Async + ThreadPoolTaskExecutor,我可以再给你示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。