一、公平锁(需要判断锁是否是自由状态,再去判断有无队列,相对于第二个线程来说)
1、锁是第一个线程来的时候
直接获取锁,与队列无关,不会产生队列
2、第二个线程来拿锁的时候
初始化队列,并进行自旋,因为第二个线程有资格拿锁,如果自锁失败,则park(),
队列第一个node为空,所以有资格拿锁的是第二个
3、第三个线程来的时候
因为队列已经初始化,所以直接排队
直接获取锁,与队列无关,不会产生队列
初始化队列,并进行自旋,因为第二个线程有资格拿锁,如果自锁失败,则park(),
队列第一个node为空,所以有资格拿锁的是第二个
因为队列已经初始化,所以直接排队