上一篇解说到了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行:这里之后的代码,次要目标是保护线程数,保障有足够的线程解决工作
至此线程池源码解说结束
发表回复