实现原理
1.aqs核心是state,int类型表示加锁状态,初始值0
2.aqs内部还有变量,用来记录加锁的是哪个线程,初始化状态,null
3.线程1跑过来调用reentrantlock的lock方法尝试加锁,这个加锁的过程,就是cas操作state的值从0编程1,设置当前加锁的线程是1
4.线程2一看state的值不是0,说明有人加过锁了,线程看是不是自己加的锁,不是加锁失败,会将自己放入等待队列中,如果是自己之前加的锁,将aqs里面的state加1.
4.线程1执行完自己的业务逻辑代码后,就会释放锁,将aqs的state减一,如果state是0,就彻底释放锁,将加锁线程变量也设置null,等待队列线程尝试加锁。