面试官:线程池是如何实现线程复用的?有没有听说过类似的机制
发布时间
阅读量:
阅读量
ThreadPoolExecutor中是如何做到线程复用的?
我们都知道每个新启动的线程都会被分配一个独立的任务一旦完成这个特定的任务后就会被系统回收资源然而在线程池中设计巧妙地实现了资源利用率在线条执行完各自的任务后会立即释放以便供其他线条使用这种机制的核心逻辑正是通过调用 addWorker() 来实现
addWorker()
- 先看上半部分addWorker()
private boolean addWorker(Runnable firstTask, boolean core) {
retry:
for (;;) {
int c = ctl.get();
int rs = runStateOf(c);
// 对边界设定的检查
if (rs >= SHUTDOWN &&
! (rs == SHUTDOWN &&
firstTask == null &&
! workQueue.isEmpty()))
return false;
for (;;) {
int wc = workerCo
全部评论 (0)
还没有任何评论哟~
