面经-并发-线程池核心参数

示意图:

 

 

1.核心线程数:最多保留的线程数(可以为0)

2.最大线程数:核心线程+救急线程

3.workQuene:阻塞队列,对任务起到缓冲作用。还未进行的线程不会直接成为救急线程,而是先存在任务队列中,等核心线程空闲下来后,会被获取执行。(上限控制)

4.救急队列:当核心线程都在运行,任务队列也都放满了,再添加新任务则会添加救急线程。不会保留在线程池中,而是有一定的生存时间。

5.生存时间keepAliveTime;时间单位unit。如果在这个时间范围内没有线程需要执行,则会从线程池把它去掉

6.拒绝策略:核心线程和任务队列满了,救急线程也超过了最大线程数上限,如果还有新任务创建,则采用handler拒绝策略。

7.线程工厂:为线程对象起个好名字。

 

 

拒绝策略:

任务队列:先进先出

任务进入后,如果有核心线程则进入核心线程执行;

如果核心线程满了则进入任务队列等待;

如果任务队列满了则创建救急线程(插队执行),执行完毕后救急线程再从任务队列里取靠前的任务执行,执行完所有任务队列后直接从线程池移除救急队列;

当救急线程也忙时,触发拒绝策略:

1.抛异常 AbortPolicy() (默认):线程池资源耗尽时直接抛异常,无法执行新任务。

2.调用者执行 CallerRunsPolicy():由调用者执行超出的任务。

3.丢弃新 DiscardPolicy():丢弃新任务,不报异常和错误。

4.丢弃老 DiscardOldestPolicy():把最早加入队列的任务丢弃掉,再把新任务加入任务队列中。

 

 
 
posted @ 2022-08-24 14:36  临易  阅读(83)  评论(0编辑  收藏  举报