java线程池一共有4种
线程池的核心参数:核心线程数,最大线程数,空闲线程存活时间,存活时间的单位,等待队列,拒绝策略,线程工厂
线程池的流程
1.执行execute方法,判断当前线程数是否小于核心线程数,如果小于执行addwork方法
2.如果大于核心线程数,判断线程池是否处于正常状态,并且将线程放入阻塞队列中
3.如果成功放入,则判断是否有空闲,如果没有空闲线程,这创建一个新的线程
4.如果失败,参数一次addwork方法,失败后执行拒绝策略
addwork
1.利用cs机制修改线程池的值
2.将线程变成work
3.利用rentrylok将work加入到线程中
4.执行
work方法里面
会调用线程工厂创建一个线程
start方法:会执行work的run方法,run方法里面会执行runWork方法
runWork方法里面有个while循环会不停的条用getTask方法获取为执行的线程,并且执行
执行失败了,会掉用processWorkerExit清理work的方法。处理移除work外,还会判断当前线程是否小于核心线程,如果小于会增加一个线程。