线程池配置详解(7大常见配置)

线程池配置详解(7大常见配置)-mikechen

线程池配置主要会涉及到7大参数,下面重点详解7大线程池配置@mikechen

线程池参数配置

线程池参数,如下所示:

ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
        corePoolSize, maxPoolSize, keepAliveTime, unit, workQueue, handler);

主要会涉及到:corePoolSize, maxPoolSize, keepAliveTime, unit, workQueue, handler。

重点是要理解上面的这几个参数,就可以搞清楚线程池配置了。

 

核心线程数(Core Pool Size)

核心线程数是线程池中保持的活动线程数量,即使线程处于空闲状态也不会被回收。

适用于维护基本的活动线程数,以减少线程创建和销毁的开销。

示例:

int corePoolSize = 5;
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
        corePoolSize, Integer.MAX_VALUE,
        0L, TimeUnit.MILLISECONDS,
        new LinkedBlockingQueue<>());

 

最大线程数(Max Pool Size)

最大线程数是线程池允许的最大线程数量,示例:

int maxPoolSize = 10;
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
        0, maxPoolSize,
        0L, TimeUnit.MILLISECONDS,
        new LinkedBlockingQueue<>());

如果任务数量超过核心线程数,且任务队列已满,线程池会创建新线程,直到达到最大线程数。

 

线程存活时间(Keep-Alive Time)

非核心线程在空闲一段时间后会被销毁,以减少资源消耗,该参数定义了空闲线程的存活时间。

示例:

long keepAliveTime = 60; // 60 seconds
TimeUnit unit = TimeUnit.SECONDS;
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
        0, Integer.MAX_VALUE,
        keepAliveTime, unit,
        new SynchronousQueue<>());

合理设置可以避免因任务突发而频繁地创建和销毁线程。

 

时间单位(Time Unit)

用于指定核心线程数、最大线程数和线程存活时间的时间单位,如秒、毫秒等。

 

任务队列(Work Queue)

任务队列用于存储等待执行的任务,可以是有界队列或无界队列。

示例:

BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(100); // Bounded queue with capacity 100
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
        corePoolSize, maxPoolSize,
        keepAliveTime, unit,
        workQueue);

任务队列用于:控制任务的排队和限制任务数量。

 

拒绝策略(Rejected Execution Policy)

拒绝策略定义了当线程池无法处理新任务时的行为,示例:

RejectedExecutionHandler handler = (r, executor) -> {
    // Custom rejection logic
    System.out.println("Task rejected: " + r.toString());
};
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
        corePoolSize, maxPoolSize,
        keepAliveTime, unit,
        workQueue, handler);

可选策略有:抛出异常、丢弃任务、丢弃最老的任务、由调用线程执行任务。

根据应用需求选择适当的拒绝策略。

 

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法