关注
// 获取线程池中的有效线程数量
int wc = workerCountOf(c);
// 如果开发者主动开启allowCoreThreadTimeOut并且获取当前工作线程大于corePoolSize,那么该线程是可以被超时回收的
// allowCoreThreadTimeOut默认为false,即默认不允许核心线程超时回收
// 这里也说明了在核心线程以外的线程都为“临时”线程,随时会被线程池回收
boolean timed = allowCoreThreadTimeOut || wc > corePoolSize;//当前线程数大于核心线程数
// 这里说明了两点销毁线程的条件:
// 1.原则上线程池数量不可能大于maximumPoolSize,但可能会出现并发时操作了setMaximumPoolSize方法,如果此时将最大线程数量调少了,很可能会出现当前工作线程大于最大线程的情况,这时就需要线程超时回收,以维持线程池最大线程小于maximumPoolSize,
// 2.timed && timedOut 如果为true,表示当前操作需要进行超时控制,这里的timedOut为true,说明该线程已经从workQueue.poll()方法超时了,
// 以上两点满足其一,都可以触发线程超时回收
if ((wc > maximumPoolSize || (timed && timedOut))
&& (wc > 1 || workQueue.isEmpty())) {
// 尝试用AQS将线程池线程数量减一
if (compareAndDecrementWorkerCount(c))
// 减一成功后返回null,线程被回收
return null;
// 否则循环重试
continue;
}
try {
// 如果timed为true,阻塞超时获取任务,否则阻塞获取任务
Runnable r = timed ?
workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS) :
workQueue.take();
if (r != null)
return r;
// 如果poll超时获取任务超时了, 将timeOut设置为true
// 继续循环执行,如果碰巧开发者开启了allowCoreThreadTimeOut,那么该线程就满足超时回收了
timedOut = true;
} catch (InterruptedException retry) {
timedOut = false;
}
难道面试官的意思是,超过了规定的时间还要进行等待一段时间在进行回收,而不是马上?
查看原帖
点赞 评论
相关推荐
05-29 14:33
门头沟学院 计算机类 不畏艰辛的文:大一就有此觉悟,小伙子很有希望。
首先要过简历,国奖、匹配的实习经历、活跃在开源社区和技术论坛都可以帮助你通过简历筛选。面试能否通过就有很多客观因素了,可以准备多刷几段实习攒攒经验值
点赞 评论 收藏
转发
查看19道真题和解析
点赞 评论 收藏
转发
点赞 评论 收藏
转发
牛客热帖
正在热议
# 牛客帮帮团来啦!有问必答 #
1126630次浏览 16884人参与
# 简历无回复,你会继续海投还是优化再投? #
24571次浏览 354人参与
# OPPO开奖 #
12161次浏览 191人参与
# 和牛牛一起刷题打卡 #
17058次浏览 1519人参与
# 通信硬件薪资爆料 #
262574次浏览 2455人参与
# 通信和硬件还有转码的必要吗 #
10444次浏览 98人参与
# 不去互联网可以去金融科技 #
10681次浏览 135人参与
# 互联网公司评价 #
96508次浏览 1252人参与
# 提前批和秋招有什么区别 #
30206次浏览 726人参与
# 你见过最离谱的招聘要求是什么? #
21169次浏览 184人参与
# 参加过提前批的机械人,你们还参加秋招么 #
14405次浏览 349人参与
# 秋招提前批启动你开冲了吗 #
24758次浏览 712人参与
# 面试被问第一学历差时该怎么回答 #
19139次浏览 211人参与
# 如何看待offer收割机的行为 #
249311次浏览 3487人参与
# 快手工作体验 #
70924次浏览 1351人参与
# 你收到了团子的OC了吗 #
535822次浏览 6361人参与
# 现在还是0offer,延毕还是备考 #
412547次浏览 4880人参与
# 提前批的机械人,你们都有面试了吗 #
11366次浏览 158人参与
# 应届生初入职场,求建议 #
35708次浏览 815人参与
# 实习生应该准时下班吗 #
95776次浏览 718人参与
# 晒一晒我的offer #
3805166次浏览 58363人参与
# 工作两年想退休了 #
20370次浏览 262人参与