三、线程池的生命周期(2个状态,其他为中间过度状态)
??running -> shutdown/stop -> tidying -> terminated
-
运行状态(running)
- 终止状态(terminated)
?声明流程:
??从running->terminated之间有shutdown、stop、tidying三个过渡状态。
??running调用shutdown()进入shutdown状态
??running调用shutdownNow()进入stop状态
??从shutdown -> tidying (流程解释:不再接收新任务,当前执行的任务结束后,而且队列为空,才会进入tidying收回)
??从stop -> tidying (流程解释:不再接收新任务,当前任务无论是否结束,阻塞队列中是否有任务,直接进入tidying全部回收)
??tidying调用terminated()进入terminated状态 (流程解释:若所有的任务都终止了,有效线程数为0,线程池会调用terminated()进入terminated状态)
??至此线程池的生命周期结束。
四、线程池的创建
-
七个参数含义:
?①:corePoolSize:核心线程池大小,线程的标准数量(常量恒定值)
?②:maximumPoolSize:最大容纳线程数量(池子的最大上限)
?③:keepAliveTime:存活时间
?④:timeUnit:存活时间单位
?⑤:blockingQueque:阻塞队列,共享资源的等待和唤醒?⑥:threadFactory:线程工厂
?⑦:rejectedExecutionHandler:饱和策略
五、阻塞队列
-
ArrayBlockingQueue(基于数组的阻塞队列)
-
LinkedBlockingQueue(基于链表的阻塞队列)
-
DelayQueue(只有当其指定的延迟时间到了才能从队列中获取元素)
-
PriorityBlockingQueue(基于优先级的阻塞队列,优先级的判断是通过构造函数传入的compator对象来决定)
-
SynchronousQueue(同步阻塞队列)
面试题:ArrayBlockingQueue和LinkedBlockingQueue区别:
原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/149396.html