await方法会阻塞ThreadA,然后ThreadB抢占到了锁获得了执行权限,这个时候在ThreadB中调用了Condition的signal()方法,将会唤醒在等待队列中节点
public final void signal() {
if (!isHeldExclusively()) //先判断当前线程是否获得了锁,这个判断比较简单,直接用获得锁的线程和当前线程相比即可
throw new
IllegalMonitorStateException();
Node first = firstWaiter; // 拿到 Condition队列上第一个节点
if (first != null)
doSignal(first);
}