1. 等待/通知机制
等待/通知机制,是指WaitThread首先获取了对象的锁,然后调用对象的wait()方法,从而放弃了锁进入了对象的等待队列中,进入等待状态。NotifyThread随后获取了对象的锁,并调用对象的notify()或notifyAll()方法,将Wai
tThread从等待队列中移到同步队列中,此时等待线程的状态变为阻塞状态。
下面分别针对等待方(消费者)和通知方(生产者)进行阐述。
等待方遵循以下原则
- 获取对象的锁
- 如果条件不满足,那么调用对象的wait()方法,被通知后仍要检查条件
- 条件满足则执行后续操作
synchronized(对象){
while(条件不满足) {
对象.wait();
}
执行后续操作
}
通知方遵循以下原则
- 获得对象的锁
- 改变条件
- 通知所有等待在对象上的线程
对应的伪代码
synchronized(对象){
改变条件
对象.notifyAll();
}
2. 等待超时模式
等待超时模式就是在等待/通知机制上增加了超时控制,即使方法执行时间过长,也不会永久阻塞调用者,而是会按照调用者的要求按时返回。
public synchronized Object get(long mills) throws InterruptedException {
long future = System.currentTimeMillis() + mills;
long remaining = mills;
//当超时大于0并且result返回值不满足条件
while ((result == null) && remaining > 0) {
wait(remaining);
remaining = future - System.currentTimeMillis();
}
return result;
}
转载:http://blog.csdn.net/fjse51/article/details/54618538