多线程编程中的等待/通知机制和等待超时模式
2016-03-27 15:51
267 查看
1. 等待/通知机制
等待/通知机制,是指WaitThread首先获取了对象的锁,然后调用对象的wait()方法,从而放弃了锁进入了对象的等待队列中,进入等待状态。NotifyThread随后获取了对象的锁,并调用对象的notify()或notifyAll()方法,将WaitThread从等待队列中移到同步队列中,此时等待线程的状态变为阻塞状态。
下面分别针对等待方(消费者)和通知方(生产者)进行阐述。
等待方遵循以下原则
获取对象的锁
如果条件不满足,那么调用对象的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; }
相关文章推荐
- python读取目录下的所有文件和文件夹
- asp.net 的过滤机制
- 20145324 《Java程序设计》第4周学习总结
- Python 外部模块requests 安装
- [面试] C/C++ —— MFC(二)
- VB课感想
- 教程: Windows 7、Vista 开启ipv6支持
- 仿最美应用-每日最美 钢琴律动效果(二)
- Java_Servlet笔记:转发与重定向
- C++中vector的remove用法
- Spring的设计目标
- netty常用代码
- 【转】spring - ioc和aop
- YII用户注冊和用户登录(五)之进行session和cookie分析 ,并在前后区分session和cookie
- Java中LinkedList原理解析
- matlab两种不同模式的并行运算
- C#-C#6.0新特性
- java.lang.InstantiationException
- 快速排序(java)
- Python 包管理