java线程池灵魂8个问题
创始人
2024-11-12 10:39:55
0

一、线程池的基础总结

1、线程池的状态机器以及对应的状态流转

2、线程池如何表示状态以及线程数

3、线程池的核心参数

4、线程池的执行过程

5/1如何实现非核心线程延迟死亡?

非核心线程延迟死亡条件为:线程池处于运行状态&&当前线程数大于最大核心线程数&&获取任务超时时间keepAliveTime

5/2 如何实现核心线程一直保活?

通过阻塞队列的take()方法让线程一直等待,使得Worker的run()方法一直阻塞,直到获取到执行的任务,执行完毕任务后继续阻塞等待,使得线程生命周期一直在RUNNABLE和WAITING状态之间流转,保证核心线程一直存活

5/3 如何释放核心线程?

allowCoreThreadTimeOut这个成员变量,将这个变量设置为true就可以跟非核心线程一样,在执行keepAliveTime还未获取到执行任务时候就移出线程池

5/4非核心线程能成为核心线程吗?

创建Worker线程类并没有识别出表示一个线程是核心线程还是非核心线程

5/5线程池如何保证并发安全?

1、线程池状态和工作线程数量的并发

2、Worker容器变更的并发(添加或者删除线程)

问题1 使用AtomicInteger使用cas+volitile保证锁

微博图2对于worker集合采用的是ReetrantLock锁保证,同一个时间只有一个线程可以操作集合对象,

问题3,并发安全工作由队列BlockingQueue本身保证线程安全,内部实现使用ReetranLock实现,

5/6 线程数设置多少是合理的

5/7存放线程对象的容器为什么使用HashSet?

工作线程类Worker恶灵实现Runnable接口,他是对线程池中工作线程的抽象,ThreadsPoolexecutor对worker集合HashSet只有add和remove才做,HashSet是基于HashMap来实现的,只要Hash函数和负载因子设计的足够好,操作HashSet效率就会足够的高O(1)

5/8 结合源码介绍下线程池设计思路?

1任务处理策略:线程池优先使用核心线程来处理任务,从任务添加策略可以看出,先考虑创建核心线程处理,在考虑放到阻塞队列,然后考虑创建非核心线程,达到饱和之后使用拒绝策略

2、线程生命周期管理:通过向阻塞队列取任务的不同操作,确保线程的存活,take()保证核心线程不死,poll保证非和核心线程等待一定时间后释放

3、容量管理:线程池不区分核心线程和非核心线程,线程池期望达到corepoolSize的并发状态,并允许在不得已情况下超载,达到orepoolsize~manmumPoolSize并发状态

4、状态管理:线程池状态和数量使用ctl表示,高3位,低29位表示线程池数量。线程池对状态检查非常苛刻,几乎在所有稍微好事或者影响下一步操作正确性代码都校验ctl

相关内容

热门资讯

大神推荐!喜扣跑胡子免费辅助器... 大神推荐!喜扣跑胡子免费辅助器(辅助挂)最初是真的有挂(有挂辅助)-哔哩哔哩;相信小伙伴都知道这个喜...
今日重大通报(WePoKe辅助... 您好,WePoKe辅助器ios这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】很...
黑科技辅助(WePoKe技巧)... 黑科技辅助(WePoKe技巧)外挂透明挂辅助工具(透视)好像真的有挂(2025已更新)(哔哩哔哩);...
记者揭秘(AAPoKer靠谱)... 记者揭秘(AAPoKer靠谱)外挂透明挂辅助挂(wePOKE)软件透明功能实现方法(确实有挂)-哔哩...
重大来袭!中至麻将有系统(辅助... 重大来袭!中至麻将有系统(辅助挂)从来是有挂(有挂方法)-哔哩哔哩;1、很好的中至麻将有系统工具软件...
必备教程(德州ai系统)原来真... 必备教程(德州ai系统)原来真的有挂(透视)素来真的有挂(有挂分享)-哔哩哔哩,德州ai系统是用手机...
黑科技辅助(AAPoKer安卓... 黑科技辅助(AAPoKer安卓版)外挂透明挂辅助挂(透视)最初是真的有挂(2021已更新)(哔哩哔哩...
玩家必知教程(AAPoKer安... 玩家必知教程(AAPoKer安卓版)外挂透明挂辅助神器(wepoke)ai辅助功能可以用(竟然是真的...
一分钟揭秘!老友十三张有辅助挂... 一分钟揭秘!老友十三张有辅助挂(辅助挂)从来是真的有挂(存在有挂)-哔哩哔哩是一款可以让一直输的玩家...
每日必看(德州扑克ai代打)一... 每日必看(德州扑克ai代打)一贯真的有挂(透视)原本真的有挂(有挂解密)-哔哩哔哩;德州扑克ai代打...