温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Executor执行器怎样创建

发布时间:2026-09-30 03:35:04 来源:亿速云 阅读:95 作者:小樊 栏目:编程语言

在 Java 中,Executor(执行器) 是 java.util.concurrent 包中用于管理线程执行任务的框架。通常我们不会直接实现 Executor 接口,而是使用 Executors 工具类 或 ThreadPoolExecutor 来创建线程池(执行器)。

下面按常见方式给你介绍如何创建和使用 Executor。


一、通过 Executors 工具类创建(最简单)

Executors 提供了几种常用的线程池创建方式。

1. 固定大小线程池(最常用)

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();
    }
}

2. 单线程执行器

ExecutorService executor = Executors.newSingleThreadExecutor();

3. 可缓存线程池(线程数动态增长)

ExecutorService executor = Executors.newCachedThreadPool();

4. 定时 / 周期任务执行器

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);

二、通过 ThreadPoolExecutor 手动创建(推荐生产环境)

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 vs ExecutorService

  • Executor:只有 execute(Runnable)
  • ExecutorService:扩展自 Executor,支持:
    • submit()(有返回值)
    • shutdown()
    • shutdownNow()
Future<?> future = executor.submit(() -> {
    return 1 + 1;
});

四、总结建议

✅ 学习/简单使用:Executors.newFixedThreadPool()
✅ 生产环境:手动 ThreadPoolExecutor
✅ 定时任务:ScheduledExecutorService

如果你是 Spring 项目,也可以直接用 @Async + ThreadPoolTaskExecutor,我可以再给你示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手