Condition
wait()、notify()与synchronized配合可以实现等待通知,condition和Lock配合同样也可以实现等待通知,但是两者之前还是有区别的。
Condition定义了等待/通知两种类型的方法,当前线程调用这些方法时,需要提前获取到Condition对象关联的锁,Condition对象是由Lock对象创建出来的(Lock.newCondition),换句话说,Condition是依赖Lock对象的。
Condition常用API
void await():
当前线程从运行状态进入等待状态或者中断,直到被通知唤醒。
boolean await(long time, TimeUnit unit);
当前线程进入等待状态,直到被通知、中断或者超时
boolean awaitUntil(Date deadline)
当前线程进入等待状态,直到被通知、中断或者到达指定的时间。到达指定的时间返回
false,否则返回true(还没有导致指定时间就被唤醒)
void signal():
唤醒一个等待在Condition上的线程,但是必须获得与该Condition相关的锁
void signalAll():
唤醒所有等待在Condition上的线程,但是必须获得与该Condition相关的锁