在调用lock方法时候,可能能为资源竞争, 导致该线程被阻塞加入到aqs等待队列中,在获取锁的线程调用realease方法后, 该线程被唤醒(locksupport),从代码上来看 说白了 阻塞线程 调用lock方法时,,实际上就是被加入到等待队列,然后进行阻塞,那么问题来了 , 被唤醒时候是会直接执行后续代码,还是继续竞争锁呢,从书的第124页上来看是竞争所,但是lock方法已经被执行过了,为什么还会再执行呢?
通过debug 发现lock方法阅读不充分,java.util.concurrent.locks.AbstractQueuedSynchronizer#acquire 方法中的acquireQueued 中有一个死循环,循环将当前线程进行了阻塞,当线程被唤醒时继续循环 tryAcquire 视图获取锁