线程池七大核心参数——趣味巧记

线程池七大核心参数

谁代表线程池

JDK 5.0起提供了代表线程池的接口:ExecutorService

ThreadPoolExecutor构造器的参数说明

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler) 

线程池七大核心参数转换思想

  • 对于线程池的七大核心参数的理解,把官方的文字描述,抽象到现实生活中的一些事务,进行初步认识,这样转换思想,初学者可以快速了解线程池参数的含义,并加深对线程池七大核心参数的理解。
  • 本文,将线程池与饮品店进行结合理解;将线程池中的线程处理任务流程,转换为员工服务顾客流程,使初识线程池的茫然感减弱,并将其与生活进行绑定。线程池七大核心参数,浅显易懂,生动有趣。
  • 线程池相当于饮品店,任务相当于顾客,线程相当于员工,具体抽象如下表:
参数参数说明相当于要求
corePoolSize指定线程池的线程数量(核心线程)长期员工不能小于0
maximumPoolSize指定线程池可支持的最大线程数员工极限最大数量 >= 核心线程数量
keepAliveTime指定临时线程的最大存活时间临时员工存在时间不能小于0
unit指定存活时间的单位(秒、分、时、天)时间单位时间单位
workQueue指定任务队列休闲卡座不能为null
threadFactory指定用哪个线程工厂创建线程招聘员工不能为null
handler指定线程忙,任务满的时候,新任务来了怎么办已招聘员工极限、而卡座已满,对顾客的处理方式不能为null

线程池主要处理流程图

请添加图片描述

流程分析

  • 代码模板如下,并进行流程分析
ExecutorService executorService = new ThreadPoolExecutor(3,5,6,
                				TimeUnit.SECONDS, 
                				new ArrayBlockingQueue<>(5),       
                                Executors.defaultThreadFactory() ,
                                new ThreadPoolExecutor.AbortPolicy());
  1. 线程池中线程数小于corePoolSize时,新任务将创建一个新线程执行任务,不论此时线程池中存在空闲线程;

相当于:饮品店中正在工作的员工数量少于长期员工数量时,新的顾客将由一名长期员工服务,无论此时店中是否有临时员工(正常经营)

  1. 线程池中线程数达到corePoolSize时,新任务将被放入workQueue中,等待线程池中任务调度执行;

相当于:饮品店中正在工作的员工数量达到长期员工数量时,新的顾客将位于卡座队列中,进行等待店中任意一名员工过来服务(排队等待)

  1. 当workQueue已满,且maximumPoolSize>corePoolSize时,新任务会创建新线程执行任务;

相当于:当店中的卡座队列已满,且本店最多可招聘员工数量大于当前长期员工数量,新的顾客来临时,饮品店将招聘一名临时员工进行为其服务。(招聘员工)

  1. 当workQueue已满,且提交任务数超过maximumPoolSize,任务由RejectedExecutionHandler处理;

相当于:当店中的卡座队列已满,且客户的数量超过本店可最多招聘员工的数量时,新的顾客的解决由RejectedExecutionHandler处理。(例如:拒绝服务)

  1. 当线程池中线程数超过corePoolSize,且超过这部分的空闲时间达到keepAliveTime时,回收该线程;

相当于:当店中的员工数量超过长期员工的数量时,且这些员工的空闲时间超过临时员工的存在时间,则进行解雇临时员工。(解雇临时员工)

- 常见考题

  • 临时线程什么时候创建啊?
    新任务提交时发现核心线程都在忙,任务队列也满了,并且还可以创建临时线程,此时才会创建临时线程。
  • 什么时候会开始拒绝任务?
    核心线程和临时线程都在忙,任务队列也满了,新的任务过来的时候才会开始任务拒绝
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷糊小丸子o_o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值