关于java:java线程池入土二

上一篇解说到了addWorker办法,那么Worker是什么货色呢?


595行:Worker类的申明,继承了aqs类,实现了runnable接口


616行:worker的构造方法,thread的是通过worker自身对象生成的


933行:取得worker外面的thread
957行:调用thread的start办法
依据616行能够得出结论,start运行的就是worker的run办法

623行:worker的run办法内容,调用了runWorker办法

runWorker办法又是什么样的呢?


1129行:取出worker外面的task工作
1131行:锁容许中断
1134行:如果task是null,调用getTask办法获取task工作
1140行:判断线程是否终止

1146行:和1157行一样,都是线程池凋谢的钩子,能够本人实现一个线程池
1149行:执行task的内容

getTask办法又是什么状况呢?


1047行:标记位,代表阻塞获取工作是否超时
1049行:死循环,获取工作
1045行:如果线程池的状态是stop以上或者是shutdown并且阻塞队列为空,返还空工作
1062行:timed通过是否运行外围死亡和以后线程数判断是否要沦亡线程
1072行:依据timed执行不同的获取工作的办法,poll一段时间内阻塞,take始终阻塞
1073行:poll获取不到工作的状况下,下一次进入就会进入1064行,返回null沦亡线程

1134行:getTask返回null后就跳出死循环,进入1167行

processWorkerExit沦亡线程做了什么?


1002行:判断标记位,进入办法前是否曾经减了一次线程数
1008行:解决工作数汇总
1009行:从工作工作队列移除工作工作
1016行:这里之后的代码,次要目标是保护线程数,保障有足够的线程解决工作

至此线程池源码解说结束

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理