正确理解wait()和notify()方法
来源:互联网 发布:航天科工33所 知乎 编辑:程序博客网 时间:2024/06/05 17:33
wait和notify是根类Object两个方法。任何类都可以调用该方法。
下面代码实现两个线程通信方式。来自《java程序员面试秘籍》
package myself;public class Syn {public static void main(String[] args) {TwoPeople.ONE.start();TwoPeople.TWO.start();}}class TwoPeople extends Thread{private int i = 0;static Thread ONE = new TwoPeople(1);static Thread TWO = new TwoPeople(2);static Object washroom = new Object();private TwoPeople(int i){this.i = i;}private void brush(){System.out.println("people"+i+" is brushing");try {Thread.sleep(2000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("people"+i+" has brushed");}private void release(){System.out.println("People "+i+" is releasing!");try {Thread.sleep(2000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("People "+i+" has released!");}@Overridepublic void run() {//我们加锁的对象是washroom,而不是this对象。所以我们调用的是washroom.wait()和washroom.notify().
<span style="white-space:pre"></span>//如果省去washroom.会抛出IllegalMonitorStateException。因为this对象上没有加锁。synchronized(washroom){try{if(i==1){brush();<strong><span style="color:#ff0000;">washroom.wait();</span></strong>//添加当前线程到washroom的等待集中release();<strong><span style="color:#ff0000;">washroom.notify()</span></strong>;}else{brush();<span style="color:#ff0000;"><strong>washroom.notify();washroom.wait();</strong></span>release();}}catch(InterruptedException e){e.printStackTrace();}}}}
0 0
- 正确理解wait()和notify()方法
- 正确理解wait 和 notify
- 正确理解线程等待和释放(wait/notify)
- 正确理解线程等待和释放(wait/notify)
- wait和notify方法
- 【解惑】 正确理解线程等待和释放(wait/notify)
- 【解惑】 正确理解线程等待和释放(wait/notify)
- wait() 和 notify()
- 多线程--生产者消费者问题(wait和notify方法)
- synchronized方法和wait、notify的关联
- 线程中的wait和notify方法
- java同步wait和notify方法
- java Object中的wait和notify方法
- Java中的Wait() 和notify()方法(转)
- Object的Wait() 和notify()方法使用
- java的wait和notify方法浅析
- 线程中的wait和notify方法
- 14.5 wait和notify方法 停止线程
- spring里的请求
- LeetCode---Reorder List
- 【Foundation-72-2】NSTimeZone - 属性
- 一些培训课程mysql R sas java python oracle
- 使用Matlab进行图像的读写、显示和缩放(最近临插值和双线性内插值法)
- 正确理解wait()和notify()方法
- mini2440通过nfs访问共享文件
- hdu3472HS BDC
- 生日悖论与随机数
- 事务(一)
- Js作用域与作用域链详解
- (55)比较字符串
- 第七周项目六停车场模拟
- 查询的结果集是否为空如何判断