社区
Java SE
帖子详情
重入锁ReentrantLock的nonfairTryAcquire方法再次获取同步状态处理逻辑的疑问
wjqwei
2016-05-11 03:10:43
重入锁ReentrantLock的nonfairTryAcquire方法再次获取同步状态的处理逻辑是通过判断当前线程是否为获取锁的线程来决定获取操作是否成功,如果是获取锁的线程再次请求,则将同步状态值进行增加并返回true,表示获取同步状态成功。
那么为什么不能在判断当前线程是获取锁的线程再次请求直接返回true,而要将同步状态值加1,同步状态值加1的实际意义是什么?
...全文
666
3
打赏
收藏
重入锁ReentrantLock的nonfairTryAcquire方法再次获取同步状态处理逻辑的疑问
重入锁ReentrantLock的nonfairTryAcquire方法再次获取同步状态的处理逻辑是通过判断当前线程是否为获取锁的线程来决定获取操作是否成功,如果是获取锁的线程再次请求,则将同步状态值进行增加并返回true,表示获取同步状态成功。 那么为什么不能在判断当前线程是获取锁的线程再次请求直接返回true,而要将同步状态值加1,同步状态值加1的实际意义是什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Matrix9002
2019-07-15
打赏
举报
回复
加1的目的当然是为了解锁的时候减一啊。这种问题也能问
springdy
2017-06-18
打赏
举报
回复
final boolean nonfairTryAcquire(int acquires) { final Thread current = Thread.currentThread(); int c = getState(); if (c == 0) { if (compareAndSetState(0, acquires)) { setExclusiveOwnerThread(current); return true; } } else if (current == getExclusiveOwnerThread()) { int nextc = c + acquires; if (nextc < 0) // overflow throw new Error("Maximum lock count exceeded"); setState(nextc); return true; } return false; } +1的情况是current == getExclusiveOwnerThread(),是当前线程已经获取锁的情况下做加一 应该是同一个线程多次获取锁标记状态用的
荣山斤火口口
2017-06-16
打赏
举报
回复
假如传递的acquires是1。ReentrantLock是支持可重入的,获取到锁的线程可以再次获取对象的锁,在获取的时候,状态进行增加,比如+1,就标识又获取了一次,在unLokc()的时候,会对状态值进行相减,如果状态值 == 0的时候,表示线程不在持有当前对象的任何锁,如果不为0,则表示还持有对象的锁,其他线程无法获取对象的锁。那么状态就是为了标识线程获取了对象的锁的次数。如果直接返回true的话,在unlock的时候,可能会造成一些问题,一些个人的简单理解,不一定对,一起讨论
彻底理解Re
entr
ant
Lock
本文深入解析Re
entr
ant
Lock
的实现原理,包括
重入
性机制及公平
锁
与非公平
锁
的区别。通过对核心
方法
nonf
air
TryAcqui
re和tryRelease的分析,帮助读者理解Re
entr
ant
Lock
如何支持线程
重入
以及公平性对
锁
获取
的影响。
Java并发编程,深入理解Re
entr
ant
Lock
本文介绍了Re
entr
ant
Lock
重入
锁
,它实现
Lock
接口,支持
重入
性,能对共享资源重复加
锁
。还阐述了
重入
性的实现原理,包括
获取
和释放
锁
的
逻辑
。同时讲解了公平
锁
与非公平
锁
的区别,如
获取
顺序、性能开销等,Re
entr
ant
Lock
默认选非公平
锁
以提高吞吐量。
Java并发系列(10)彻底理解Re
entr
ant
Lock
本文详细解析了Re
entr
ant
Lock
的
重入
性和公平
锁
与非公平
锁
的实现原理,包括其核心
方法
nonf
air
TryAcqui
re和tryRelease的工作流程,以及公平
锁
如何确保
获取
锁
的公平性。
Java SE
62,622
社区成员
307,255
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章