社区
Java SE
帖子详情
重入锁ReentrantLock的nonfairTryAcquire方法再次获取同步状态处理逻辑的疑问
wjqwei
2016-05-11 03:10:43
重入锁ReentrantLock的nonfairTryAcquire方法再次获取同步状态的处理逻辑是通过判断当前线程是否为获取锁的线程来决定获取操作是否成功,如果是获取锁的线程再次请求,则将同步状态值进行增加并返回true,表示获取同步状态成功。
那么为什么不能在判断当前线程是获取锁的线程再次请求直接返回true,而要将同步状态值加1,同步状态值加1的实际意义是什么?
...全文
599
3
打赏
收藏
重入锁ReentrantLock的nonfairTryAcquire方法再次获取同步状态处理逻辑的疑问
重入锁ReentrantLock的nonfairTryAcquire方法再次获取同步状态的处理逻辑是通过判断当前线程是否为获取锁的线程来决定获取操作是否成功,如果是获取锁的线程再次请求,则将同步状态值进行增加并返回true,表示获取同步状态成功。 那么为什么不能在判断当前线程是获取锁的线程再次请求直接返回true,而要将同步状态值加1,同步状态值加1的实际意义是什么?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
源码的使用问题详解.docx
当一个线程已经持有了
锁
,如果
再次
请求
锁
,它仍然能够
获取
成功,这就是可
重入
性。在Re
entr
ant
Lock
中,这种特性通过state变量的管理得以实现,state记录了
锁
的持有次数。 然后,我们来看公平
锁
与非公平
锁
的区别。...
java并发之Reetran
Lock
Re
entr
ant
Lock
是 Java 并发包中的一个重要组件,它支持
重入
性,表示能够对共享资源能够重复加
锁
,即当前线程
获取
该
锁
再次
获取
不会被阻塞。这种机制可以让开发者更方便地编写并发程序。 Re
entr
ant
Lock
的实现原理 ...
面试必问之AQS原理详解.pdf
**AQS原理详解** AbstractQueuedSynchronizer(AQS)是Java并发包中的核心组件,主要...在实际应用中,如Re
entr
ant
Lock
、Semaphore等
同步
组件都是基于AQS实现的,它提供了灵活的基础架构,开发者可以自定义
同步
逻辑
。
Re
entr
ant
Lock
源码解析(二)
其
nonf
air
TryAcqui
re()
方法
实现了非公平的
锁
获取
逻辑
,即线程可以直接尝试
获取
锁
,而不是等待队列中的其他线程释放
锁
。 2.
锁
获取
与释放 2.1 加
锁
- 当
锁
为空(getState() == 0)时,使用CAS操作...
重入
锁
Re
entr
ant
Lock
详解
重入
锁
Re
entr
ant
Lock
,顾名思义,就是支持重进入的
锁
,。除此之外,该
锁
的还支持
获取
锁
时的公平和非公平性选择。在AQS实现中,当一个线程调用Mutex的
lock
()
方法
获取
锁
之后,如果
再次
调用
lock
()
方法
,则该线程将会被...
Java SE
62,634
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章