使用Synchronized关键字(synchronized方法或者synchronized代码块)来保证线程间同步,则系统中存在同步监视器(显式或者隐式),可以使用wait()、notify()、notifyAll()来协调线程通信。
但是当我们直接使用Lock对象来保证同步的话,则系统中就不存在同步监视器一说。也就不能使用上述的几个方法。
那怎么办呢?
当使用Lock对象保证同步的话,JAVA提供了一个Condition的类来协调线程通信。这个Conditon对象必须要绑定到一个Lock对象上。
Lock lock = new ReentrantLock();
Condition cond = lock.newCondition();
类似于Synchronized关键字提供的那些方法,Condition类也提供了一些方法来协调线程间通信。
await()
signal()
signalAll()
这三个方法的作用与之前的那三个方法类似。