首先要明确的是在调用wait()和notify()的时候都要先获取锁,wait()调用后,不仅会释放cpu,同时也会释放锁,在wait返回的时候会先尝试获取锁,只有再次获得锁之后wait才会正确的返回
任意一个Java对象,都拥有一组监视器方法(定义在java.lang.Object上),主要包括wait()、wait(long timeout)、notify()以及notifyAll()方法,这些方法与synchronized同步关键字配合,可以实现等待/通知模式。Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者在使用方式以及功能特性上还是有差别的。
第一种:
Object obj = new Object();
synchronized(obj){
...................
lock.wait();
................
}
第二种:
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
public void conditionWait() throws InterruptedException {
lock.lock();
try {
condition.await();
} finally {
lock.unlock();
}
}
阅读(991) | 评论(0) | 转发(0) |