线程池的重要性
什么是池/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
钩子方法
使用线程池的注意点
-
避免任务堆积
-
避免线程数过度增加
-
排查线程泄露
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!