本文主要是介绍ReentrantLock源码阅读、AQS核心原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. ReentrantLock
源码阅读
JDK
版本1.8.0_191
。
2. AQS
核心原理
3. VarHandler
将最新的线程加入等待队列,设置它的前一个节点的时候,会用到VarHandler
。JDK1.8
没有用,这个是1.9
之后才有。
1.8
是直接使用node.prev = pred;
1.8
中将当前线程加入等待队列的源码如下:
if (pred != null) {node.prev = pred;if (compareAndSetTail(pred, node)) { // CAS操作加入队尾pred.next = node;return node;}}
附录:利用下面的代码打个断点,一步步调试就可以阅读到源码。
package com.company;import java.util.concurrent.locks.ReentrantLock;public class Main {private static volatile int i = 0;public static void main(String[] args) {// write your code hereReentrantLock lock = new ReentrantLock();lock.lock(); // 打断点,进去一步步读lock.lock(); i++;lock.unlock();}
}
这篇关于ReentrantLock源码阅读、AQS核心原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!