博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生产,消费者改进
阅读量:5294 次
发布时间:2019-06-14

本文共 1531 字,大约阅读时间需要 5 分钟。

/*等待的目的是让cpu给其他线程。*/class Resource{	private String name;	private int count = 0;	private boolean flag = false;	Resource(String name)	{		this.name = name;	}	public synchronized void product()	{		while(flag)						//此处如果是if的效果		{			try			{				wait();			}			catch (InterruptedException ex)			{							}		}		this.name = "---"+this.count;		System.out.println(Thread.currentThread().getName() + "生产者---" + this.name);		flag  = true;		this.count++;		this.notify();	}		public synchronized void consume()	{		while(!flag)					//此处如果是if的效果,如果某个线程被wait,接着又一个,然后两个都醒了,就会造成对一个产品两次消费		{			try			{				wait();			}			catch (InterruptedException ex)			{			}		}		System.out.println(Thread.currentThread().getName() + "消费者---------" + this.name);		flag = false;		this.notify();	}}class Product implements Runnable{	private Resource sr;	Product(Resource sr)	{		this.sr = sr;	}	public void run()	{		while(true)		{			if(sr != null)			{				sr.product();			}		}	}}class Consume implements Runnable{	private Resource sr;	Consume(Resource sr)	{		this.sr = sr;	}	public void run()	{		while(true)		{			if(sr != null)			{				sr.consume();			}		}	}}class DemoRunnable{	public static void main(String[] args) 	{		Resource sr = new Resource("产品");		Product p = new Product(sr);		Consume c =new Consume(sr);		Thread t1 = new Thread(p);		Thread t2 = new Thread(p);		Thread c1 = new Thread(c);		Thread c2 = new Thread(c);		Thread c3 = new Thread(c);		t1.start();		t2.start();		c1.start();		c2.start();		c3.start();	}}

转载于:https://www.cnblogs.com/dengshiwei/p/4258538.html

你可能感兴趣的文章
eclipse 最简单的方法 显示行号
查看>>
Winform应用ssk皮肤
查看>>
Java实现二叉树先序,中序,后序遍历
查看>>
Hello World
查看>>
java 打印栈信息
查看>>
解决flex4 分辨率自适应问题
查看>>
表扫描和索引扫描
查看>>
移动硬盘加密!让windows用户无法查看移动硬盘!
查看>>
部署Flask项目到腾讯云服务器CentOS7
查看>>
使用python实现京东抢购脚本
查看>>
登录之后更新导航
查看>>
saddle中每一个属性赋值给到WebPlate中的同名属性
查看>>
图论专题考试2 爆零祭
查看>>
21.centos7基础学习与积累-007-远程连接
查看>>
获取当前日期和随机数
查看>>
透视ERP会计科目 (转自SAP屠夫的博客)
查看>>
0049 MyBatis关联映射--一对一关系
查看>>
解决ultravnc在win2008 R2下CTRL+ALT+DELETEA组合键发送失败的问题
查看>>
Ceph相关
查看>>
大小写转换
查看>>