ReentrantLock释放时 , 也会处理重入 , 关键点就是对getState() - release后的处理 , 是否返回true或者false
protected final boolean tryRelease(int releases) { int c = getState() - releases; if (Thread.currentThread() != getExclusiveOwnerThread()) throw new IllegalMonitorStateException(); boolean free = false; if (c == 0) { // 只有资源数为0才会解锁 // 才算释放成功 , 否则这锁还是占住了free = true; setExclusiveOwnerThread(null); } setState(c); return free;}AQS如何响应超时AQS提供的方法中带有Nanos后缀的方法就是支持超时中断的方法 。
核心逻辑就是每次阻塞前 , 确认nanosTimeout是否已经超时了 。
每次唤醒时 , 将nanosTimeout减去阻塞所花的时间 , 重新确认 , 并修改lastTime
关键部分见下图
文章插图
spinForTimeoutThreshold是什么?首先这个值是写死的1000L即1000纳秒
1000纳秒是个非常小的数字 , 而小于等于1000纳秒的超时等待 , 无法做到十分的精确 , 那么就不要使用这么短的一个超时时间去影响超时计算的精确性 , 所以这时线程不做超时等待 , 直接做自旋就好了 。
点击关注 , 第一时间了解华为云新鲜技术~
【JUC中的AQS底层详细超详解】
经验总结扩展阅读
- 许运东婉萍是什么电视剧中的人物?
- 为什么女儿9岁了睡觉头上出汗
- 迎战高考的励志祝福文案
- 许舒贝是什么电视剧中的人物?
- 裘正宇是什么电视剧中的人物?
- 西厂雨化田是什么电影中的人物?
- Briefings in Bioinformatics-2021 知识图谱-生物信息学-医学顶刊论文:生物信息学中的图表示学习:趋势、方法和应用
- 苏简和黄凯迪是什么电视剧中的人物?
- 3步训练培养你心目中的小神童
- 艾莉是什么电视剧中的人物?