Condition是在java1.5才出现。它用来替换传统的 wait(), notify()实现线程之间的协作。但是更加强大。
Condition用 await(), signal, signalAll方法替代wait(), notify()。假如用wait,notify,有三个线程调用一个对象的某个方法,notify只能随机的唤醒一个线程,而不能指定唤醒某个线程,但是用condition的话,就可以唤醒指定的线程。可以看下面的例子。
condition的await,signal和 wait,notify都需要在锁之间运行。
contidion也被用来实现阻塞队列。
condition是通过锁创建出来的。基本代码是 ReentrantLock.newCondition().
lock.lock();
condition.await();
lock.unlock();