共计 774 个字符,预计需要花费 2 分钟才能阅读完成。
上一篇解说到了 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 行:这里之后的代码,次要目标是保护线程数,保障有足够的线程解决工作