社区
Java SE
帖子详情
重入锁ReentrantLock的nonfairTryAcquire方法再次获取同步状态处理逻辑的疑问
wjqwei
2016-05-11 03:10:43
重入锁ReentrantLock的nonfairTryAcquire方法再次获取同步状态的处理逻辑是通过判断当前线程是否为获取锁的线程来决定获取操作是否成功,如果是获取锁的线程再次请求,则将同步状态值进行增加并返回true,表示获取同步状态成功。
那么为什么不能在判断当前线程是获取锁的线程再次请求直接返回true,而要将同步状态值加1,同步状态值加1的实际意义是什么?
...全文
579
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
,顾名思义,就是支持重进入的
锁
,。除此之外,该
锁
的还支持
获取
锁
时的公平和非公平性选择。在AQS实现中,当一个线程调用Mutex的
lock
()
方法
获取
锁
之后,如果
再次
调用
lock
()
方法
,则该线程将会被...
可
重入
锁
Re
entr
ant
Lock
源码解读
同时,和synchronized—样,Re
entr
ant
Lock
支持可
重入
。除此之外,Re
entr
ant
Lock
在调度上更灵活,支持更多丰富的功能。在Java SE 5 之后,并发包中新增了
Lock
接口用来实现
锁
功能,它提供了与synchronized关键字类似的...
并发编程之可
重入
锁
Re
entr
ant
Lock
今天的博文我们讲述了Re
entr
ant
Lock
与Synchronized的区别联系,也解析了Re
entr
ant
Lock
可
重入
、可中断、超时机制以及conditon变量的源码。通过源码我们可以知道Re
entr
ant
Lock
是通过AQS保证
同步
,其他的中断机制、...
【Java并发】-- Re
entr
ant
Lock
可
重入
锁
实现原理1 -
获取
锁
表示可
重入
的
锁
,举个例子:当线程t1通过调用
lock
()
方法
获取
锁
之后,
再次
调用
lock
,是不会再阻塞
获取
锁
的,直接增加重试次数就行了。synchronized 和 Re
entr
ant
Lock
都是可
重入
锁
; 来个简单的demo来说明一...
详解Re
entr
ant
Lock
为什么是可
重入
锁
- 可
重入
是因为可重
锁
lock
中核心
逻辑
:如果CAS,成功,则继续执行设置独占,setExclusiveOwnerThread;CAS失败,进入可
重入
逻辑
; - 可
重入
执行
逻辑
入口:acquire(...),java.util.concurrent.
lock
s....
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章