在Java并发编程中,线程池是一个非常重要的概念。它不仅可以提高程序性能,还能有效控制系统资源的使用。本篇Java线程池教程将带你从零开始,一步步理解并掌握Java线程池的核心知识和线程池使用方法。
每次创建和销毁线程都会带来系统开销。如果任务频繁且短暂,频繁创建线程会严重降低系统性能。而线程池通过复用已创建的线程,避免了这种开销。
Java 提供了 java.util.concurrent.Executors 工具类来快速创建常见的线程池,底层基于 ThreadPoolExecutor 类。
下面是一个使用 newFixedThreadPool 的完整例子:
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ThreadPoolExample { public static void main(String[] args) { // 创建一个固定大小为3的线程池 ExecutorService executor = Executors.newFixedThreadPool(3); // 提交10个任务 for (int i = 0; i < 10; i++) { final int taskId = i; executor.submit(() -> { System.out.println("任务 " + taskId + " 正在由线程 " + Thread.currentThread().getName() + " 执行"); try { Thread.sleep(1000); // 模拟耗时操作 } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }); } // 关闭线程池(不再接受新任务) executor.shutdown(); }} 运行这段代码,你会发现只有3个线程在循环处理10个任务,这正是线程池“复用线程”的体现。
虽然 Executors 很方便,但在生产环境中更推荐直接使用 ThreadPoolExecutor 来精细控制线程池行为。其构造函数如下:
ThreadPoolExecutor( int corePoolSize, // 核心线程数 int maximumPoolSize, // 最大线程数 long keepAliveTime, // 空闲线程存活时间 TimeUnit unit, // 时间单位 BlockingQueue<Runnable> workQueue, // 任务队列 ThreadFactory threadFactory, // 线程工厂 RejectedExecutionHandler handler // 拒绝策略) 当任务队列已满且线程数达到最大值时,新提交的任务会被拒绝。Java 提供了四种内置拒绝策略:
AbortPolicy(默认):抛出 RejectedExecutionException 异常。CallerRunsPolicy:由调用线程(提交任务的线程)执行该任务。DiscardPolicy:静默丢弃任务。DiscardOldestPolicy:丢弃队列中最老的任务,然后重试提交。Executors 创建线程池(阿里《Java开发手册》建议),应手动创建 ThreadPoolExecutor 以避免资源耗尽风险。shutdown() 或 shutdownNow() 关闭线程池,防止内存泄漏。ThreadFactory 实现)。通过本篇Java线程池教程,你已经掌握了线程池的基本概念、常用类型、核心参数以及最佳实践。无论是面试还是实际开发,Java并发编程中的线程池都是必须掌握的知识点。希望你能动手实践,真正理解线程池使用方法,写出高性能、高可用的 Java 应用!
—— 掌握Java线程池,让你的程序更高效! ——
本文由主机测评网于2025-12-17发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025129071.html