编写一个生产与消费的程序,具体要求:店主告诉生产者生产一组产品,生产者生产出之后运给店主,店主通知生产者我们这里只放得下一组产品你等等再生产,店主通知消费者取走这组产品,店主通知消费者你等等,我们这里没有产品了,店主告诉生产者生产一组产品,生产者生产出之后运给店主,店主通知生产者... ...就是这样一个运作流程(如下图所示).

Java【多线程知识总结(8)】线程通信,wait()与notify()的运用

代码:

class ShengChan implements Runnable
{
	DianZhu d;

	public ShengChan(DianZhu d)
	{
		this.d=d;
	}

	public void run()
	{
		int i=0;
		while(true)
		{
			System.out.println("");//很奇怪,去掉这行就不能交替运行了,知道的网友,请赐教,谢谢.
			if(i==0)
			{
				d.put("001","洗衣机");
			}
			else
			{
				d.put("002","冰箱");
			}
			i=(i+1)%2;
		}
	}
}

class XiaoFei implements Runnable
{
	DianZhu d;
	public XiaoFei(DianZhu d)
	{
		this.d=d;
	}

	public void run()
	{
		while(true)
		{
			d.get();
		}
	}
}


class DianZhu
{
	private String proID="";
	private String proName="";
	private boolean isFull=false;//店主放的产品是否满了?默认为false;表示未满.


	public  synchronized void put(String proID,String proName)
	{
		if(isFull==false)//如果是空的.
		{
			//生产产品
			this.proID=proID;
			this.proName=proName;
			isFull=true;//产品已经生产好
		//	System.out.println(Thread.currentThread().getName()+":生产完毕!");
					notify();//通知[消费线程]工作,注意:notify();具备有先启动,等该线程休息,才生效的特性
		}
		else//如果是满的,[生产线程]休息
		{
			//	System.out.println(Thread.currentThread().getName()+":休息!\n");
				try{wait();}catch(Exception e){e.printStackTrace();}
		}	
		
	}

	public  synchronized void get()
	{
		if(isFull==true)//如果有产品
		{
			//消费者取走产品
			System.out.println("proID:"+proID);
			System.out.println("proName:"+proName);
			isFull=false;//消费者已经取走产品
		//	System.out.println(Thread.currentThread().getName()+":取产品完毕!");
			notify();//通知[生产线程]工作
		}
		else//如果没有产品,[消费线程]休息
		{
			//			System.out.println(Thread.currentThread().getName()+":休息!\n");
						try{wait();}catch(Exception e){e.printStackTrace();}				
		}


	}

}


public class ShengChanLian
{
	public static void main(String[]args)
	{
		DianZhu d=new DianZhu();
		ShengChan s=new ShengChan(d);//创建对象的同时把DianZhu对象传过去
		XiaoFei x=new XiaoFei(d);
		//启动线程
		new Thread(s).start();
		new Thread(x).start();
	}
}

输出结果:

 Java【多线程知识总结(8)】线程通信,wait()与notify()的运用

推荐:关于多线程限制交替执行次数问题,请阅读:Java【多线程知识总结(10)】线程通信之wait()与notify()的运用--模拟指挥官指挥2个连队交替轰炸战区
Java【多线程知识总结(8)】线程通信,wait()与notify()的运用
CSDN
Java编程技术交流QQ群:171396965  技术需要交流,技术需要与时俱进.这里是优秀爱好Java编程的集聚地,我们一起学习,共同进步.加入时请注明Java字样,谢谢.
Java【多线程知识总结(8)】线程通信,wait()与notify()的运用
Java【多线程知识总结(8)】线程通信,wait()与notify()的运用
作者:StellaAh 发表于2011-10-10 1:03:31 原文链接
阅读:3400 评论:20 查看评论

相关文章:

  • 2021-06-30
  • 2021-09-02
  • 2021-09-16
  • 2022-12-23
  • 2021-12-02
  • 2021-05-24
猜你喜欢
  • 2021-12-18
  • 2021-08-03
  • 2022-12-23
  • 2021-07-08
  • 2021-07-31
  • 2022-12-23
相关资源
相似解决方案