码迷,mamicode.com
首页 > 其他好文 > 详细

先后有序的wait和notify

时间:2018-09-07 16:44:40      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:lan   ext   tee   trace   通知   代码块   mon   sys   thread   

这里先讲述 大道扬帆 里的一个小故事 话说男猪脚扬帆驾驭一叶扁舟在碧海上飘荡。 一只木浆在扬帆手里上下翻飞,惊起了层层涟漪。 “把帆扬起来吧,也省些力气。”夏夏道。 “海风还没到(signal),现在扬帆还早。我现在先眯会,等到(wait)大风起来的时候,才能借风之力遨游九天之上。” /** * wait和notify需要在同步方法或者同步代码块中使用, * 否则会报 java.lang.IllegalMonitorStateException * @author Administrator * */ public class 远航 { public static void main(String[] args) throws InterruptedException { Object 海风将起 = new Object(); 扬帆 猪脚扬帆 = new 扬帆(海风将起); 海风 外力海风 = new 海风(海风将起); 猪脚扬帆.start(); // 猪脚先起个线程眯一会。 外力海风.start(); /** * 海风迟迟不来,还是让男猪脚卖力划吧 */ // 猪脚扬帆.interrupt(); } } public class 扬帆 extends Thread { private Object 海风将起; public 扬帆(Object 海风将起) { this.海风将起 = 海风将起; } @Override public void run() { try { synchronized (海风将起) { 海风将起.wait(); } System.err.println("扬帆: 海风来了,终于可以歇会了!"); } catch (InterruptedException e) { e.printStackTrace(); System.err.println("扬帆: 不用等海风了"); } } } public class 海风 extends Thread { private Object 海风将起; public 海风(Object 海风将起) { this.海风将起 = 海风将起; } @Override public void run() { System.err.println("海风: 还没来,你们再等等吧......"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.err.println("海风: 来了,通知扬帆......"); synchronized (海风将起) { 海风将起.notify(); // 海风将起.notifyAll()通知扬帆和夏夏; } } }

先后有序的wait和notify

标签:lan   ext   tee   trace   通知   代码块   mon   sys   thread   

原文地址:http://blog.51cto.com/13855604/2171686

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!