基本概念
  • Condition的作用: 对锁进行更精确的控制
    • 对于同一个锁,可以创建多个Condition, 在不同的情况下使用不同的Condition
  • ConditionObject类之间的联系:
Condition Object
等待 await() wait()
唤醒 signal() notify()
唤醒全部 signalAll() notifyAll()
互斥锁或者共享锁 synchronized关键字的同步锁
Condition方法

await

/**
 * 使当前线程处于等待状态
 * 当前线程在接收到唤醒信号或者被中断之前一直处于等待状态
 *  
 * @throw InterruptedException 被中断时会抛出异常
 */
void await() throws InterruptedException;

/**
 * 使当前线程处于等待状态
 * 当前线程在接收到唤醒信号,被中断之前或者到达指定等待的时间之前一直处于等待状态
 *  
 * @param time 指定的等待时间
 * @param unit 指定的等待时间的单位
 * @return boolean 如果等待时间没有结束则返回false,否则返回true
 * @throw InterruptedException 被中断时会抛出异常
 */
boolean await(long time, TimeUnit unit) throws InterruptedException;

awaitNanos

/**
 * 使当前线程处于等待状态
 * 当前线程在接收到唤醒信号,被中断之前或者到达指定等待的时间之前一直处于等待状态
 *  
 * @param nanosTimeout 指定的等待的最大时间
 * @return long 剩余的等待时间
 * @throw InterruptedException 被中断时会抛出异常
 */
long awaitNanos(long nanosTimeout) throws InterruptedException;

awaitUninterruptibly

/**
 * 使当前线程处于等待状态
 * 当前线程在接收到唤醒信号之前一直处于等待状态 
 */
void awaitUninterruptibly();

awaitUtil

/**
 * 使当前线程处于等待状态
 * 当前线程在接收到唤醒信号,被中断之前或者到达指定的截止日期之前一直处于等待状态
 *  
 * @param deadline 截止日期
 * @return boolean 如果超过指定的日期则返回true,如果未到指定的截止日期则返回false
 * @throw InterruptedException 如果被中断则抛出异常 
 */
boolean awaitUntil(Date deadline) throws InterruptedException;

signal

/**
 * 唤醒一个等待线程
 */
void signal();

signalAll

/**
 * 唤醒所有等待线程
 */
void signalAll();