阳光VIP

少壮不努力,老大徒伤悲。平日弗用功,自到临期悔。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

编写程序:模拟指挥官下达指令要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字样,谢谢.
Java编程技术交流QQ群171396965
作者:StellaAh 发表于2011-10-12 2:24:26 原文链接
阅读:2805 评论:10 查看评论