JDK8 new ReentrantLock((true)加锁流程
更新时间:2023年07月06日 10:35:35 作者:子瞻
这篇文章主要介绍了java面试中常遇到的问题JDK8 new ReentrantLock((true)加锁流程示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
new ReentrantLock(true)加锁流程
protected final boolean tryAcquire(int acquires) {
//获取当前线程
final Thread current = Thread.currentThread();
//获取state值
int c = getState();
//还没有线程占用
if (c == 0) {
//!(头节点和尾节点不是一个节点 && (头节点的next -> NULL 或者 头节点.next节点 不是 当前线程 ))
//也就是说,头尾是一个节点 或者 头节点.next节点的线程是当前线程
if (!hasQueuedPredecessors() &&
//cas 0 -> 1
compareAndSetState(0, acquires)) {
/设置独占线程
setExclusiveOwnerThread(current);
return true;
}
}
//当前线程等于独占线程
else if (current == getExclusiveOwnerThread()) {
//state值+1
int nextc = c + acquires;
if (nextc < 0)
throw new Error("Maximum lock count exceeded");
//重新赋值 state 值
setState(nextc);
return true;
}
//否则返回false
return false;
}如果获得锁失败,和JDK8 new ReentrantLock()加锁流程中流程一样!
以上就是JDK8 new ReentrantLock((true)加锁流程的详细内容,更多关于JDK8 new ReentrantLock的资料请关注脚本之家其它相关文章!
相关文章
Spring Boot整合mybatis并自动生成mapper和实体实例解析
本文是小编给大家总结的关于Spring Boot整合mybatis并自动生成mapper和实体的内容,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧2018-05-05
Spring调度框架EnableScheduling&Scheduled源码解析
这篇文章主要介绍了Spring调度框架EnableScheduling&Scheduled源码解析,@EnableScheduling&Scheduled定时调度框架,本着不仅知其然还要知其所以然的指导思想,下面对该调度框架进行源码解析,以便更好的理解其执行过程,需要的朋友可以参考下2024-01-01
关于在Springboot中集成unihttp后应用无法启动的解决办法
本文主要介绍了在SpringBoot项目中集成UniHttp框架时遇到的无法启动问题,并提供了解决方法,作者通过详细记录和分析问题,希望为其他开发者提供有价值的参考和借鉴,感兴趣的朋友跟随小编一起看看吧2025-03-03


最新评论