线程池非公共方法解析
- addWorker
- addWorkerFailed
- runWorker
- getTask
- processWorkerExit
- runStateOf
- workerCountOf
- ctlOf
- runStateLessThan
- runStateAtLeast
- isRunning
- compareAndIncrementWorkerCount
- compareAndDecrementWorkerCount
- decrementWorkerCount
- advanceRunState
- tryTerminate
- terminated
- checkShutdownAccess
- interruptWorkers
- interruptIdleWorkers
- reject
- onShutdown
- isRunningOrShutdown
- drainQueue
addWorker
线程池中添加工作线程的方法,该方法在池处于运行态且池内工作线程数未达到设定边界时,为线程池添加工作线程。当core参数为true时,边界为最小线程数,反之边界为最大线程数。
以上循环用于池状态及边界校验,校验成功时触发ctl工作线程数+1并退出循环。
Worker构造方法内部调用池线程工厂的newThread方法初始化thread字段。worker对象添加到wordkers成功后会触发线程启动,启动成功时返回true,反之触发ctl工作线程数-1并返回false。
addWorkerFailed
在addWorker方法启动线程失败时调用,可以减少ctl中工作线程总数。
runWorker
线程池中工作线程获取及执行任务的方法,线程启动时通过run方法调用。
当任务队列不为空时,getTask方法可以从任务队列中获取任务,任务执行前Worker对象加锁可以标记当前线程为非空闲线程(池置为关闭态时需要根据该标记中断线程),beforeExecute与afterExecute无实际操作,留与子类覆写,在任务获取或执行发生异常时,能通过processWorkerExit方法新增工作线程。
getTask
线程池中工作线程获取任务的方法。
当timed为true时,会通过任务队列poll方法获取任务,反之通过take方法获取,timed受allowCoreThreadTimeOut及corePoolSize控制。
processWorkerExit
线程池中维护工作线程总数的方法。从Worker对象集合中移除w后,根据completedAbruptly判断是否新增线程,当且仅当completedAbruptly为true时,新增一个Worker对象。
runStateOf
从ctl中提取出池状态。
workerCountOf
从ctl中提取出池内线程数。
ctlOf
将池状态与池内线程总数封装为ctl。
以上三个方法原理已在之前的篇章中说明,本篇不再做详细介绍。详细了解请移步==>ctl。
runStateLessThan
判断参数一与参数二大小。当且仅当参数一小于参数二时返回true,反之返回false。
runStateAtLeast
判断参数一与参数二大小。当且仅当参数一不小于参数二时返回true,反之返回false。
isRunning
判断参数一与SHUTDOWN大小,当且仅当参数一小于SHUTDOWN时返回true,反之返回false。
compareAndIncrementWorkerCount
通过CAS为ctl加一,当且仅当CAS操作成功时返回true,反之返回false。
compareAndDecrementWorkerCount
通过CAS为ctl减一,当且仅当cas成功时返回true,反之返回false。
decrementWorkerCount
为ctl减一,当且仅当操作成功时退出循环。
advanceRunState
尝试将池状态转换为参数状态。当且当池状态不低于参数状态或转换成功跳出循环。
tryTerminate
尝试将池状态转换为终止状态,当转换成功或符合以下条件时跳出循环。
池处于运行态
池不低于整理态
池处于关闭态,且任务队列非空
池内线程总数不为0
terminated
无实际操作,留与子类覆写。
checkShutdownAccess
获取当前池内所有工作线程的修改权限。
interruptWorkers
中断所有线程。
w.interruptIfStarted方法可中断还未中断的线程。
interruptIdleWorkers
若参数为true,则中断单个空闲线程。反之中断所有空闲线程。
当工作线程获取到任务到执行任务前,Worker会进行一次加锁操作,任务执行完成或出错时解锁,因此当线程不空闲时,w.tryLock()返回false,反之返回true。
reject
执行当前拒绝策略。
onShutdown
无实际操作,留与子类覆写。
isRunningOrShutdown
判断池是否运行,当池处于关闭态且任会执行任务或处于运行态时返回true,反之返回false。
drainQueue
返回当前任务队列中任务列表。