java:经典消费生成者
产品类:
public class Info {
	private String title = "生产";
	private String content = "生产罐头";
	private boolean flag = false; // 默认是false
	/*
	 * 1、flag = true,表示可以生产,但是不能取走
	 *
	 * 2、flag = false,表示可以取走,但是不能生产
	 */
	public synchronized void set(String title, String content) {
		if (flag == false) {// 已经生产过了,需要等待
			try {
				super.wait(); // 等待
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		this.setTitle(title);
		this.setContent(content);
		this.flag = false;// 表示不能生产了
		super.notify(); // 唤醒其他等待的线程
	}
	public synchronized void get() {
		if (flag == true) {// 表示不能取
			try {
				super.wait(); // 等待
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println(this.title + " --> " + this.content);
		this.flag = true;// 表示不能取走了
		super.notify(); // 唤醒
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
}
生产类:
public class Producer implements Runnable {
	private Info info = null;
	public Producer(Info info) {
		this.info = info;
	}
	@Override
	public void run() {
		// TODO 自动生成的方法存根
		for (int x = 0; x < 100; x++) { // 不断的生产
			if (x % 2 == 0) {// 是奇数
				this.info.set("消费", "购买罐头");
			} else {
				this.info.set("生产", "生产罐头");
			}
		}
	}
}
消费类:
public class Consumer implements Runnable {
	private Info info = null;
	public Consumer(Info info) {
		this.info = info;
	}
	@Override
	public void run() {
		// TODO 自动生成的方法存根
		for (int x = 0; x < 100; x++) {
			this.info.get();
		}
	}
}
测试:
public class TestInfo3 {
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Info info = new Info();
		Producer pro = new Producer(info); // 实例化生产者对象
		Consumer con = new Consumer(info); // 实例化消费者对象
		new Thread(pro).start(); // 启动线程
		new Thread(con).start(); // 启动线程
	}
}
java:经典消费生成者的更多相关文章
- Java经典算法四十例编程详解+程序实例
		
JAVA经典算法40例 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程 ...
 - JAVA经典算法50题(转)
		
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1] 题目:古典问题:有一对兔子, ...
 - 115道Java经典面试题(面中率最高、最全)
		
115道Java经典面试题(面中率最高.最全) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可 ...
 - JAVA经典总结
		
Java经典实例(第二版) 1. 获取环境变量 Java代码 1. System.getenv("PATH"); 2. System.getenv("JAVA_HOME& ...
 - java经典算法题50道
		
原文 JAVA经典算法50题[程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序 ...
 - JAVA调用 keytool 生成keystore 和 cer 证书
		
keytool是一个Java数据证书的管理工具, keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里, 包含两种数据: 密钥实体( ...
 - gen目录无法更新,或者gen目录下的R.JAVA文件无法生成
		
gen目录无法更新,或者gen目录下的R.JAVA文件无法生成 1.gen目录的用处 android gen目录下的R.java并不是由用户创建,而是android工程本身将android的资源进行自 ...
 - java中如何生成可执行的jar文件
		
java中如何生成可执行的jar文件 最简单的方法就是: jar -cfe Card.jar CardLayoutDemo CardLayoutDemo$1.class CardLayoutDemo$ ...
 - 通过java来批量生成身份证号
		
通过java来批量生成身份证号,方便来测试程序. package com.diyvc.controller.user; import java.util.Calendar; import java.u ...
 
随机推荐
- mysql 查询行号
			
SELECT @rowno:=@rowno+1 as rowno,r.* from t_zg_loanee_apply r,(select @rowno:=0) t;
 - 第一次写这么长的js
			
是公司一个项目,要求显示不同的sku,然后根据sku组合显示不同的价格区间,根据填写的数量落在哪个价格区间,然后进行计算.实际截图如下: 前端JS如下: <script type="t ...
 - Oracle经典SQL
			
最近本人整理了一些Oracle sql,现分享给大家,后续还会更新.如果有错误的地方,请指正,共同学习.贴上去的sql都是我测试过的,大家可以粘贴在自己的电脑上试试. 1.查询部门的名称,及最低收入雇 ...
 - 通过正则表达式实现简单xml文件解析
			
这是我通过正则表达式实现的xml文件解析工具,有些XHTML文件中包含特殊符号,暂时还无法正常使用. 设计思路:常见的xml文件都是单根树结构,工具的目的是通过递归的方式将整个文档树装载进一个Node ...
 - ubuntu vim8.0源码安装
			
安装篇 从https://github.com/vim/vim下载相应zip源码文件,利用unzip vim-master.zip 命令解压到当前用户目录,即~: 解压后进入vim的src目录,首先, ...
 - MySql.Data.dll 不支持输出参数
			
insert INTO stu(name) VALUES('maimai'); set @ReturnValue=@@IDENTITY; string sql="insert INTO st ...
 - python之禅
			
>>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is ...
 - break continue return
			
break 通常用在循环语句和开关语句中,当break语句用于do-while.for.while循环语句中时,可使程序终止循环而执行循环后面的语句, 通常break语句总是与if语句联在一起,即满足 ...
 - T检验与F检验的区别_f检验和t检验的关系
			
1,T检验和F检验的由来 一般而言,为了确定从样本(sample)统计结果推论至总体时所犯错的概率,我们会利用统计学家所开发的一些统计方法,进行统计检定. 通过把所得到的统计检定值,与统计学家建立了一 ...
 - UVALive 3401 彩色立方体
			
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...