ReenrantLock 加锁过程

 

  1. ReenrantLock 加锁过程流程图以及AQS队列入队情况ReenrantLock 加锁过程

2.公平锁与非公平锁区别

  • 非公平锁: 当锁释放的时候,获取锁的线程会和队列中第一个线程竞争锁资源,但是已经在队列中的线程还是按照先进先出的顺序去获取锁。
  • 公平锁: 当锁释放的时候,队列中第一个线程会去获取锁资源。

3.队列中元素如何出队?

  • 当t1释放资源,t2如果获取到锁,那么会把t2之前结点的指针都断开,让GC回收该结点。原来的t2设置成null,把AQS的头指针指向t2改变后的结点。

4.谁持有锁,那么就把持有锁的线程设置成它;队列中排队的线程(t3)会把上一个排队的线程(t2)的waitStatus设置成-1,表示上一个线程阻塞(t2)。waitStatus的值修改的话是在解锁的过程中。

5.锁可以重入:如果请求锁的线程和当前线程相等,那么该锁可以重入,AQS的state就会加1;

6.AQS队列中第一个元素的thread一定是null!