作用
Condition对象的使用与wait()和notify()方法大致相同,只不过wait()和notify()是与synchronized关键字合作使用,而Condition是与重入锁相关联的。
简单使用
public class ReenterLockCondition implements Runnable{
static ReentrantLock reentrantLock=new ReentrantLock();
static Condition condition= reentrantLock.newCondition();
@Override
public void run() {
reentrantLock.lock();
try{
System.out.println("等待中");
condition.await();
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
reentrantLock.unlock();
System.out.println("唤醒结束");
}
}
public static void main(String[] args) throws InterruptedException {
ReenterLockCondition reenterLockCondition=new ReenterLockCondition();
Thread thread=new Thread(reenterLockCondition);
thread.start();
Thread.sleep(1000);
// 先获得锁才能唤醒
reentrantLock.lock();
try{
condition.signal();
} finally {
reentrantLock.unlock();
}
}
}
注意:
线程使用Condition.await()和Condition.signal()前,都要求线程先获得相关的锁。