找回密码
 立即注册
首页 业界区 安全 Java线程池完全指南:从原理到实战的7个关键点 ...

Java线程池完全指南:从原理到实战的7个关键点

溥价 6 天前
前言

线程池是Java并发编程的核心组件,也是面试必考题。本文从原理到实战,带你全面掌握线程池的7个关键点。
一、为什么需要线程池?

每次创建线程都有开销:

  • 线程创建需要调用系统API,开销大
  • 线程销毁也需要开销
  • 大量线程会消耗内存
线程池解决问题:

  • 线程复用,减少创建销毁开销
  • 控制最大并发数
  • 提供任务队列,缓冲突发请求
二、线程池核心参数
  1. public ThreadPoolExecutor(
  2.     int corePoolSize,      // 核心线程数
  3.     int maximumPoolSize,   // 最大线程数
  4.     long keepAliveTime,    // 空闲线程存活时间
  5.     TimeUnit unit,         // 时间单位
  6.     BlockingQueue<Runnable> workQueue,  // 任务队列
  7.     ThreadFactory threadFactory,       // 线程工厂
  8.     RejectedExecutionHandler handler   // 拒绝策略
  9. )
复制代码
三、线程池执行流程


  • 任务来了,核心线程数未满 → 创建核心线程执行
  • 核心线程已满,队列未满 → 任务加入队列
  • 队列已满,线程数未达最大值 → 创建非核心线程执行
  • 线程数已达最大值 → 执行拒绝策略
四、4种拒绝策略


  • AbortPolicy:直接抛异常(默认)
  • CallerRunsPolicy:由调用线程执行任务
  • DiscardPolicy:直接丢弃,不抛异常
  • DiscardOldestPolicy:丢弃队列中最老的任务
五、常见线程池
  1. // 固定大小线程池
  2. ExecutorService fixedPool = Executors.newFixedThreadPool(10);
  3. // 缓存线程池(线程数无限,适合短期异步任务)
  4. ExecutorService cachedPool = Executors.newCachedThreadPool();
  5. // 单线程线程池
  6. ExecutorService singlePool = Executors.newSingleThreadExecutor();
  7. // 定时任务线程池
  8. ScheduledExecutorService scheduledPool = Executors.newScheduledThreadPool(5);
复制代码
六、线程池最佳实践

CPU密集型任务:核心线程数 = CPU核数 + 1
IO密集型任务:核心线程数 = CPU核数 * 2
  1. // 推荐用法:手动创建线程池
  2. ThreadPoolExecutor executor = new ThreadPoolExecutor(
  3.     Runtime.getRuntime().availableProcessors(),
  4.     Runtime.getRuntime().availableProcessors() * 2,
  5.     60L, TimeUnit.SECONDS,
  6.     new LinkedBlockingQueue<>(1000),
  7.     new ThreadFactoryBuilder().setNamePrefix("my-pool-").build(),
  8.     new ThreadPoolExecutor.CallerRunsPolicy()
  9. );
复制代码
七、线程池监控
  1. // 关键指标
  2. executor.getActiveCount();     // 活跃线程数
  3. executor.getQueue().size();    // 队列任务数
  4. executor.getCompletedTaskCount(); // 已完成任务数
  5. executor.getPoolSize();        // 当前线程数
复制代码
总结

掌握线程池的7个关键点,不仅能在面试中游刃有余,更能在实际项目中写出高性能的并发程序。
本文由AI辅助创作。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册