关注
首先Reentrantlock具有以下几个特性
1.可实现公平锁
2.可重入
3.条件变量
4.可打断
首先第一点,Reentrantlock是默认公平的,当我们调用其无参构造函数时,会创建NonfairSync对象,该对象继承自AQS,该对象在获取锁的时候不会去检查 AQS 队列,即每个线程都可以公平的去竞争锁,当调用了有参构造函数传入了fair参数时进入非公平锁,非公平锁在获取锁的时候会先检查 AQS 队列中是否有前驱节点, 没有才去竞争,即队列中位于头结点的线程可以获取锁。
第二,可重入,如果线程已经获得了锁, 并且判断获取锁的线程还是当前线程, 表示发生了锁重入,此时将state的值加1,表示又加了一次锁,释放锁时每释放一层锁对state减1。
第三条件变量,每个条件变量对应着一个等待队列,该队列的实现类为 ConditionObject。每一个 ConditionObject维护一个双向链表,当调用await()方法时,会将线程加入到对应条件变量的队列中。调用了signal()方法后会把条件队列中的第一个节点追加到等待队列中,即唤醒该线程去竞争锁。
第四可打断,Reentrantlock在默认情况下是不可打断的,在此模式下,即使它被打断,仍会留在AQS队列中,等获得锁后方能继续运行。在可打断模式下,调用interupt()方法,使LockSupport.park 取消阻塞的话,会抛出 InterruptedException,停止尝试获取锁。对应源码如下:
if (shouldParkAfterFailedAcquire(p, node) &&
parkAndCheckInterrupt())
throw new InterruptedException();
查看原帖
点赞 1
相关推荐
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
- 1... HR面,到底该准备些啥(附核心问题回答思路)8655
- 2... 如何委婉地拒绝offer6532
- 3... #校招笔试##恒生电子#数据库没学过,第二道A出来了,第三道没A出来,后面有思路但是已经懒得写了3532
- 4... 分享一个很友好的公司2885
- 5... 【彻底战败】秋招11次一面挂2053
- 6... 零基础转前端五个月拿下美团offer2048
- 7... 绿盟 安全工程师1902
- 8... #校招笔试##中国电信#还是有点难度的,专业知识考的很广,行测题做了好久(比代码都久),代码题倒是不难,最后一题要点技巧,其他都是签到送分1801
- 9... 抖音电商泡一个月挂了!1782
- 10... 七牛云路演1748
正在热议
更多
# 国庆后,我的返工状态 #
15646次浏览 81人参与
# 谈薪时HR压价该怎么应对 #
226565次浏览 3232人参与
# 深信服秋招来了 #
277836次浏览 2912人参与
# 什么专业适合考公 #
40938次浏览 243人参与
# 机械制造岗投递时间线 #
31138次浏览 379人参与
# 华为海思工作体验 #
27638次浏览 116人参与
# 爱玛科技集团求职进展汇总 #
18852次浏览 159人参与
# 招银网络求职进展汇总 #
153619次浏览 965人参与
# 26届秋招投递记录 #
43871次浏览 488人参与
# 毕业租房也有小确幸 #
138003次浏览 4480人参与
# 央国企投递记录 #
119838次浏览 1508人参与
# 实习中的菜狗时刻 #
436669次浏览 3499人参与
# 找工作有哪些冷知识 #
158679次浏览 2443人参与
# 电信求职进展汇总 #
17833次浏览 114人参与
# 百度工作体验 #
266083次浏览 2105人参与
# 薪资爆料 #
168233次浏览 1387人参与
# 深信服提前批进度交流 #
93665次浏览 678人参与
# 校招求职有谈薪空间吗 #
173009次浏览 2186人参与
# 腾讯音乐求职进展汇总 #
130762次浏览 990人参与
# 毕业季,你想好怎么跟生活对线了吗? #
249021次浏览 3821人参与
# 找工作前vs找工作后的心路变化 #
24396次浏览 206人参与
# 荣耀求职进展汇总 #
956101次浏览 5032人参与