温馨提示×

温馨提示×

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

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

什么是线程池java

发布时间:2026-10-03 11:37:50 来源:亿速云 阅读:92 作者:小樊 栏目:编程语言

在 Java 中,线程池(Thread Pool) 是一种管理线程的机制,用于复用线程、控制并发数量、提高性能。


一、为什么要用线程池?

如果每次任务都 new Thread():

  • 创建和销毁线程开销大
  • 线程数不可控,容易耗尽系统资源
  • 任务多了之后性能下降

✅ 线程池的好处:

  • 复用线程,减少创建销毁开销
  • 限制最大线程数,防止资源耗尽
  • 任务队列,平滑处理高并发
  • 提供统一的线程管理

二、Java 中线程池的核心类

Java 线程池主要在:

java.util.concurrent

核心接口和类:

  • Executor
  • ExecutorService(常用)
  • ThreadPoolExecutor(底层实现)
  • Executors(工厂类,快速创建)

三、使用 Executors 创建线程池(简单方式)

ExecutorService pool = Executors.newFixedThreadPool(5);

pool.execute(() -> {
    System.out.println("任务执行");
});

pool.shutdown();

常见工厂方法:

方法 说明
newFixedThreadPool(n) 固定大小线程池
newCachedThreadPool() 可缓存线程池
newSingleThreadExecutor() 单线程池
newScheduledThreadPool(n) 定时任务线程池

⚠️ 实际开发不推荐直接使用 Executors(容易 OOM),推荐 ThreadPoolExecutor


四、ThreadPoolExecutor(推荐方式)

ThreadPoolExecutor executor = new ThreadPoolExecutor(
    2,                      // 核心线程数
    5,                      // 最大线程数
    60L,                    // 空闲线程存活时间
    TimeUnit.SECONDS,
    new LinkedBlockingQueue<>(10) // 任务队列
);

executor.execute(() -> {
    System.out.println("Hello ThreadPool");
});

executor.shutdown();

参数说明

  1. corePoolSize:核心线程数
  2. maximumPoolSize:最大线程数
  3. keepAliveTime:多余线程存活时间
  4. unit:时间单位
  5. workQueue:任务队列
  6. threadFactory(可选):线程工厂
  7. handler(可选):拒绝策略

五、任务提交方式

// 无返回值
executor.execute(Runnable);

// 有返回值
Future<String> future = executor.submit(() -> "结果");

六、线程池执行流程(重点)

当一个任务提交:

  1. 核心线程是否满?→ 用核心线程
  2. 队列是否满?→ 放入队列
  3. 是否达到最大线程?→ 创建新线程
  4. 都满 → 触发拒绝策略

七、拒绝策略

策略 行为
AbortPolicy 抛异常(默认)
CallerRunsPolicy 调用者线程执行
DiscardPolicy 直接丢弃
DiscardOldestPolicy 丢弃最老任务

八、适用场景

  • Web 服务器请求处理
  • 异步任务
  • 批量数据处理
  • 定时任务

如果你愿意,我可以:

  • 画 线程池执行流程图
  • 给你 面试版总结
  • 对比 线程 vs 线程池
  • 讲 Spring 中的线程池(ThreadPoolTaskExecutor)

你想看哪一个?

向AI问一下细节

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

AI
助
手