调用Condition.await()必须在ReentrantLock内。即需要加锁后调用。
    根据MISA模型,await()方法会释放持有的锁,所以要先获取锁,才能释放锁。

    同样调用对象的await()时,必须在Synchronized同步块中。因为调用await()方法也会释放锁

    原理看CyclicBarrier

    await()方法
    前半段:
    释放锁,进入条件队列中,然后阻塞线程
    过度阶段
    被其他调用singal、singalAll的线程唤醒(唤醒前:完成条件队列到同步队列的转移)
    后半段(独占锁逻辑)
    获取锁(如果获取失败,再次阻塞)。执行完逻辑后,释放锁(唤醒同步队列中head的后续节点)