三、线程池的生命周期(2个状态,其他为中间过度状态)

??running -> shutdown/stop -> tidying -> terminated

  1. 运行状态(running)

  2. 终止状态(terminated)

?声明流程:

??从running->terminated之间有shutdown、stop、tidying三个过渡状态。

??running调用shutdown()进入shutdown状态

??running调用shutdownNow()进入stop状态

??从shutdown -> tidying (流程解释:不再接收新任务,当前执行的任务结束后,而且队列为空,才会进入tidying收回)

??从stop -> tidying (流程解释:不再接收新任务,当前任务无论是否结束,阻塞队列中是否有任务,直接进入tidying全部回收)

??tidying调用terminated()进入terminated状态 (流程解释:若所有的任务都终止了,有效线程数为0,线程池会调用terminated()进入terminated状态)

??至此线程池的生命周期结束。

在这里插入图片描述

四、线程池的创建

在这里插入图片描述

  1. 七个参数含义:

    ?①:corePoolSize:核心线程池大小,线程的标准数量(常量恒定值)

    ?②:maximumPoolSize:最大容纳线程数量(池子的最大上限)

    ?③:keepAliveTime:存活时间

    ?④:timeUnit:存活时间单位

    ?⑤:blockingQueque:阻塞队列,共享资源的等待和唤醒?⑥:threadFactory:线程工厂

    ?⑦:rejectedExecutionHandler:饱和策略

    在这里插入图片描述

五、阻塞队列

  1. ArrayBlockingQueue(基于数组的阻塞队列)

    在这里插入图片描述

  2. LinkedBlockingQueue(基于链表的阻塞队列)

    在这里插入图片描述

  3. DelayQueue(只有当其指定的延迟时间到了才能从队列中获取元素)

    在这里插入图片描述

  4. PriorityBlockingQueue(基于优先级的阻塞队列,优先级的判断是通过构造函数传入的compator对象来决定)

    在这里插入图片描述

  5. SynchronousQueue(同步阻塞队列)

    在这里插入图片描述

    面试题:ArrayBlockingQueue和LinkedBlockingQueue区别:

    在这里插入图片描述