版本
JDK8(JDK1.8)
Condition 接口源码重点
1.Condition将Object监视方法(Object.wait()、Object.notify() 和Object.notifyAll())分解出来,通过将它们与任意Lock实现相结合,使每个对象具有多个等待集的效果。当Lock替换了synchronized方法和语句时,Condition替换了对象监视器方法的使用。
Lock源码可以看我这篇文章 Lock
2.Condition(也称为条件队列或条件变量)为一个线程提供了一种暂停执行(即等待)的方法, 直到另一个线程通知。Condition提供的关键属性是, 它以原子方式释放关联的锁并挂起当前线程,就像Object.wait()
3.Condition实例本质上绑定到锁。要获取特定Lock实例的Condition实例,请使用其Lock.newCondition() 方法。
4.Condition中定义的所有方法使用之前都必须获取锁,否则会抛出 IllegalMonitorStateException 异常
5.Condition接口中定义的方法
| 方法名 | 作用 |
|---|---|
| void await() | 使当前线程等待,直到发出信号(即signal()或signalAll())或Thread.interrupt() |
| void awaitUninterruptibly() | 使当前线程等待,直到发出信号。(无法被Thread.interrupt()中断) |
| long awaitNanos(long nanosTimeout) | 使当前线程等待,直到发出信号或被中断,或经过指定的等待时间(时间单位:纳秒) |
| await(long time, TimeUnit unit) | 使当前线程等待,直到发出信号或被中断,或经过指定的等待时间(时间单位:可自己指定) |
| boolean awaitUntil(Date deadline) | 使当前线程等待,直到发出信号或被中断,或者指定的截止日期过去 |
| void signal() | 唤醒一个正在等待的线程 |
| void signalAll() | 唤醒所有等待的线程 |
Condition 接口源码
package java.util.concurrent.locks;
import java.util.Date;
import java.util.concurrent.TimeUnit;
public interface Condition {
void await() throws InterruptedException;
void awaitUninterruptibly();
long awaitNanos(long nanosTimeout) throws InterruptedException;
boolean await(long time, TimeUnit unit) throws InterruptedException;
boolean awaitUntil(Date deadline) throws InterruptedException;
void signal();
void signalAll();
}



