ReentrantLock
1. 和Aqs的关系
2. 非公平锁加锁流程
- 第一个线程t1,第一次加锁,没有加锁之前 aqs(NonfairSync)的状态
2. t1加锁成功后
3. 第二个线程t2尝试加锁,如果加锁成功
4. t2加锁失败,会创建队列
- t == null队列还没有创建;
- compareAndSetHead(new Node())创建一个Thread=null的head;
- node.prev = t; t2节点的prev指向head;
- t.next = node; head的next节点指向t2。
6. 第三个线程t3尝试加锁,并且t1没有释放锁,t2还在队列中