Java【多线程知识总结(10)】线程通信之wait()与notify()的运用--模拟指挥官指挥2个连队交替轰炸战区
Posted on 2011-10-12 02:24 阳光VIP 阅读(185) 评论(0) 编辑 收藏 举报编写程序:模拟指挥官下达指令要A连向[01战区]连续发射12枚导弹,记为第1次轰炸.A连完成之后向指挥官报告完毕.指挥官告诉A连等等再轰炸.指挥官下达指令要B连向[02战区]连续发射30枚导弹,记为第1次轰炸,B连完成之后向指挥官报告完毕.指挥官告诉B连等等再轰炸.指挥官下达指令要A连向[01战区]连续发射12枚导弹,记为第2次轰炸,A连完成之后向指挥官报告完毕.指挥官告诉A连等等再轰炸.....这样交替轰炸下去,A,B连分别轰炸了50次.
[代码]
class TongxunTest { public static void main(String[]args) { ZhiHuiGuan z=new ZhiHuiGuan(); A a=new A(z,50); B b=new B(z,50); new Thread(a,"这是A连").start(); new Thread(b,"这是B连").start(); } } class A implements Runnable { ZhiHuiGuan z; int count=0;//用于统计轰炸的次数 public A(ZhiHuiGuan z,int count) { this.z=z; this.count=count; } public void run() { for(int j=1;j<=count;j++) { z.aHongZha(12); System.out.println("==========="+Thread.currentThread().getName()+"完成第"+j+"次轰炸==========="); } } } class B implements Runnable { ZhiHuiGuan z; int count=0;//用于统计轰炸的次数 public B(ZhiHuiGuan z,int count) { this.z=z; this.count=count; } public void run() { for(int j=1;j<=count;j++) { z.bHongZha(30); System.out.println("==========="+Thread.currentThread().getName()+"完成第"+j+"次轰炸==========="); } } } class ZhiHuiGuan { boolean isOk=true;//标识当前由A连进行轰炸 public synchronized void aHongZha(int j) { // while(!isOk)//这行用if和while都可以,while(!isOk)有"真的是(或不是)我执行嘛?"显得更专业,严谨,安全,建议以后在判断是否是当前线程执行的时候,请用while! { try{wait();}catch(Exception e){} } for(int a=1;a<=j;a++) { System.out.println(Thread.currentThread().getName()+"第"+a+"枚导弹发射.."); } isOk=false; notify();//唤醒B连进行轰炸 } public synchronized void bHongZha(int j) { while(isOk)//isOk为True 就等待 { try{wait();}catch(Exception e){} } for(int a=1;a<=j;a++) { System.out.println(Thread.currentThread().getName()+"第"+a+"枚导弹发射..."); } isOk=true; notify();//唤醒A连进行轰炸 } }*输出结果:
/* 这是B连第19枚导弹发射... 这是B连第20枚导弹发射... 这是B连第21枚导弹发射... 这是B连第22枚导弹发射... 这是B连第23枚导弹发射... 这是B连第24枚导弹发射... 这是B连第25枚导弹发射... 这是B连第26枚导弹发射... 这是B连第27枚导弹发射... 这是B连第28枚导弹发射... 这是B连第29枚导弹发射... 这是B连第30枚导弹发射... ===========这是B连完成第45次轰炸=========== 这是A连第1枚导弹发射.. 这是A连第2枚导弹发射.. 这是A连第3枚导弹发射.. 这是A连第4枚导弹发射.. 这是A连第5枚导弹发射.. 这是A连第6枚导弹发射.. 这是A连第7枚导弹发射.. 这是A连第8枚导弹发射.. 这是A连第9枚导弹发射.. 这是A连第10枚导弹发射.. 这是A连第11枚导弹发射.. 这是A连第12枚导弹发射.. ===========这是A连完成第46次轰炸=========== 这是B连第1枚导弹发射... 这是B连第2枚导弹发射... 这是B连第3枚导弹发射... 这是B连第4枚导弹发射... 这是B连第5枚导弹发射... 这是B连第6枚导弹发射... 这是B连第7枚导弹发射... 这是B连第8枚导弹发射... 这是B连第9枚导弹发射... 这是B连第10枚导弹发射... 这是B连第11枚导弹发射... 这是B连第12枚导弹发射... 这是B连第13枚导弹发射... 这是B连第14枚导弹发射... 这是B连第15枚导弹发射... 这是B连第16枚导弹发射... 这是B连第17枚导弹发射... 这是B连第18枚导弹发射... 这是B连第19枚导弹发射... 这是B连第20枚导弹发射... 这是B连第21枚导弹发射... 这是B连第22枚导弹发射... 这是B连第23枚导弹发射... 这是B连第24枚导弹发射... 这是B连第25枚导弹发射... 这是B连第26枚导弹发射... 这是B连第27枚导弹发射... 这是B连第28枚导弹发射... */
CSDN
Java编程技术交流QQ群:171396965 技术需要交流,技术需要与时俱进.这里是优秀爱好Java编程的集聚地,我们一起学习,共同进步.加入时请注明Java字样,谢谢.
作者:StellaAh 发表于2011-10-12 2:24:26 原文链接
阅读:2805 评论:10 查看评论