无论是公平锁还是非公平锁,他们的出队顺序都是有序的。
公平与非公平的真正含义是他们在加锁的时候**
进入队列之前
进入lock方法
- 非公平锁二话不说,直接去CAS抢锁
- 
- 如果失败才准备进入队列
公平锁直接准备进入队列
- 
准备进入队列流程
真正进入队列之前
准备进入队列,在真正进入队列之前,它们都会不死心,
getState() 判断一下锁是否仍然被别的线程持有,如果没有人持有非公平锁会再去CAS抢一次锁
- CAS失败才真正进入队列
- 公平锁会判断自己是不是第一个元素
- 如果是第一个元素,就不进入队列(甚至不初始化队列),而是去会去CAS拿一次锁
- 如果不是第一个元素,才真正进入队列,并且自己睡眠,开始排队。