您的位置:首页 > 编程语言

多线程编程中的等待/通知机制和等待超时模式

2016-03-27 15:51 267 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: