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的资料请关注脚本之家其它相关文章!
相关文章
Java import static及import原理区别解析
这篇文章主要介绍了Java import static及import原理区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-10-10Maven依赖管理之parent与dependencyManagement深入分析
首先我们来说说parent标签,其实这个不难解释,就是父的意思,pom也有继承的。比方说我现在有A,B,C,A是B,C的父级。现在就是有一个情况B,C其实有很多jar都是共同的,其实是可以放在父项目里面,这样,让B,C都继承A就方便管理了2022-10-10Java8 LocalDateTime时间日期类使用实例详解
本文从 LocalDateTime 类的创建、转换、格式化与解析、计算与比较以及其他操作几个方面详细介绍了 LocalDateTime 类在 Java 8 中的使用,感兴趣的朋友跟随小编一起看看吧2024-03-03
最新评论