线程池简介

线程池的重要性

 

什么是池/h3>

软件中的池,可以理解为计划经济

为什么使用线程池/h3>

1.反复创建线程开销大

2.过多的线程会占用太多的内存

用少量的线程——避免内存占用过多

让这部分线程都保持工作,且可以反复执行任务——避免生命周期的损耗

应用场合

线程池简介

创建和停止线程池

线程池构造方法的参数

线程池简介

 

添加线程的规则

线程池简介

 

增减线程的特点

线程池简介

 

工作队列

常见的队列类型

1.直接交接:SynchronousQueue

2.无界队列:LinkedBlockingQueue

3.有界队列:ArrayBlockingQueue

4.延迟队列:DelayedWorkQueue

线程池手动创建还是自动创建

自动创建(即直接调用JDK封装好的构造方法)

1.newFixedThreadPool

弊端:超出工作队列,内存溢出

线程池简介

2.newSingleThreadExecutor

弊端:当请求堆积,占用大量内存

3.CachedThreadPool

可缓存线程池

特点:具有自动回收多余线程的功能

线程池简介

 

4.ScheduledThreadPool

支持定时及周期性任务执行的线程池

5.workStealingPool是JDK1.8加入的

  • 这个线程池和之前的都有很大不同

  • 子任务

  • 窃取,每个线程之前可以合作

4种线程池的构造方法的参数

线程池简介

 

正确创建线程池的方法

根据不同的业务场景,设置线程池参数

比如:内存有多大,给线程取什么名字等等

线程池里的线程数量多少合适

线程池简介

 

停止线程池的正确方法

1、shutdown

并不会马上停止,把之前的任务执行完毕后,才停止线程池

2、isShutdown

判断线程池是否进入停止状态

3、isTerminated

判断线程池是否完全终止

4、awaitTermination

用来判断

所有任务执行完毕

等待的时间到了

等待过程中被打断了,抛出异常

5、shutdownNow

立刻停止线程池,返回在任务队列未执行的任务集合

暂停和恢复线程池

任务太多怎么拒绝

线程池简介

 

4种拒绝策略

AbortPolicy

DiscardPolicy

DiscardOldestPolicy

CallerRunsPolicy

钩子方法

使用线程池的注意点

  • 避免任务堆积

  • 避免线程数过度增加

  • 排查线程泄露

来源:new 杨海波

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年6月15日
下一篇 2022年6月15日

相关推荐