上一篇讲解到了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行:这里之后的代码,主要目的是维护线程数,保证有足够的线程处理任务
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。