package productiveConsumption2;

/*

* 面包类

*/

public class Bread {

private int id;

private String name;

public Bread(int id, String name) {

super();

this.id = id;

this.name = name;

}

public Bread() {

super();

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return "Bread [id=" + id + ", name=" + name + "]";

}

}

package productiveConsumption2;

//超市类

public class SuperMarket {

// 存面包的数量

Bread[] breads = new Bread[10];

// 记录下标

int index = -1;

// 进面包

public synchronized void getBread(Bread bread) {

if (index >= breads.length – 1) {

try {

this.wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

index++;

breads[index] = bread;

System.out.println("进面包:" + bread);

this.notify();

}

// 卖面包

public synchronized void saleBread() {

if (index < 0) {

try {

this.wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

System.out.println("卖面包:" + breads[index]);

index–;

this.notify();

}

}

package productiveConsumption2;

/*

* 消费者

*/

public class Coustomer implements Runnable {

private SuperMarket market;

public Coustomer(SuperMarket market) {

super();

this.market = market;

}

@Override

public void run() {

for (int i = 1; i <= 20; i++) {

market.saleBread();

}

}

}

package productiveConsumption2;

/*

* 工厂类

*/

public class Factory implements Runnable{

private SuperMarket market;

public Factory(SuperMarket market) {

super();

this.market = market;

}

@Override

public void run() {

for (int i = 1; i <= 20; i++) {

market.getBread(new Bread(i, "好吃面包" + i));

}

}

}

package productiveConsumption2;

/*

* 测试类

*/

public class Test {

public static void main(String[] args) {

SuperMarket m = new SuperMarket();

Coustomer c = new Coustomer(m);

Factory f = new Factory(m);

Thread t1 = new Thread(c);

Thread t2 = new Thread(f);

t1.start();

t2.start();

}

}

本文由【waitig】发表在等英博客 本文固定链接:java生产消费者模式 欢迎关注本站官方公众号,每日都有干货分享!

点赞 (0)赏分享 (0)

java生成者消费者模式,java生产消费者模式相关推荐

  1. java 生成pdf itext_使用Java组件itext 生成pdf介绍

    iText是一个能够快速产生PDF文件的Java类库.iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的.它的类库尤其与java Servlet有很好的给合.使用iText与 ...

  2. java生成二维码/java解析二维码

    二维码的优缺点 优点:1. 高密度编码,信息容量大:2.编码范围广:3.容错能力强:4.译码可靠性高:5.可引入加密措施:6.成本低,易制作,持久耐用. 缺点:1.二维码技术成为手机病毒.钓鱼网站传播 ...

  3. java实现pdf的生成下载打印,java生成pdf电子账单,java生成pdf合同模板

    最近公司要做个生成pdf电子账单凭证的功能,由于这个公司没有任何代码可借鉴,这个时候我就必须得自己搞明白具体的每一步应该怎么做,引什么jar包?用什么方式去实现?这篇博客中会给出从头到尾及其详细的代码 ...

  4. java实现保存合同模板_java实现pdf的生成下载打印,java生成pdf电子账单,java生成pdf合同模板...

    最近公司要做个生成pdf电子账单凭证的功能,由于这个公司没有任何代码可借鉴,这个时候我就必须得自己搞明白具体的每一步应该怎么做,引什么jar包?用什么方式去实现?这篇博客中会给出从头到尾及其详细的代码 ...

  5. Java生成PDF文件,java面试题,java初级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 一. ...

  6. java生成world文件_HelloWorld.java文件如何创建?

    原创HelloWorld.java文件如何创建? 编辑:小丸子 来源:PC下载网时间:2017-10-17 19:55:54 相信各位刚接触JAVA的新人都希望尽快编写出自己的第一个程序,今天PC下载 ...

  7. Java 生成条形 二维码 Java 生成条形码 订单条形码 Java生成各种条形码 java条形码生成示例 java 生成条形 二维码

    1.加入Maven.或者Jar依赖 maven依赖, 如果不是Maven项目,则需要去 Maven中央仓库下载Jar <!-- 二维码工具--><dependency>< ...

  8. java生成横向的pdf,java – 如何生成横向跨越多个页面的PDF报告

    我必须使用许多(在运行时定义)列生成PDF报告.当用户选择要显示的许多字段时,这些报告可能水平跨越多个页面.我正在使用DynamicJasper,并且当所有列都适合一个页面时,可以成功生成动态报告.如 ...

  9. java生成电子发票_C#/Java 动态生成电子发票

    电子发票是电商时代的产物,PDF发票是最常见的电子发票之一.在这篇文章中,我将给大家分享一个免费的动态生成PDF电子发票的C#方案,并在文章末尾附上Java解决方案. 典型的发票包含客户和供应商的名称 ...

  10. java生成32位流水号,Java生成流水号

    import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Date; public cla ...

最新文章

  1. php页面上限制字符串长度,PHP如何限制字符串显示长度
  2. python numpy np.lexsort()(使用键序列执行间接稳定排序)(具体没太搞懂区别?)
  3. 7-37 模拟EXCEL排序 (25 分)(思路+详解+超时解决 兄弟们冲呀呀呀呀呀呀)
  4. 两个矩阵相乘的乘法次数_C ++程序将两个数字相乘而不使用乘法运算符
  5. java swing 注册事件_比较Java Swing中三种注册事件的方法
  6. channelfuture怎么拿到数据_SpringBoot2.x系列教程66--Spring Boot整合分布式事务之数据库事务回顾
  7. mysql必背_必背的mysql语句.doc
  8. python selenium安装教程_Python Selenium模块安装使用教程详解
  9. hightcharts 如何修改legend图例的样式
  10. 嵌入式系统硬件原理设计与审核
  11. D star路径搜索算法
  12. 围棋人机大战一周年:被AlphaGo改变的世界
  13. mysql 加锁 索引_MySQL 加锁处理分析
  14. html实现字体加边框及填充
  15. HEXO SEO 高级优化
  16. 百度开源地图服务器搭建
  17. pp模块常用表 sap_SAP 常用表 MM PP SD FICO PM PS QM WM 等
  18. 树莓派远程4G遥控车教程(二)-相机云台舵机初步调试
  19. 有道笔记无法同步(笔录)
  20. 大事件!全球顶级院士科学家齐聚阿里巴巴

热门文章

  1. python高阶函数心得_没有学不会的python--高阶函数
  2. 微信小程序获取用户手机号授权方法
  3. 如何画诱人的嘴唇?该怎么画嘴唇?
  4. STM32CubeIDE1.9.0\STM32CubeMX 6.5 F429IGT6加LAN8720A,配置ETH+LWIP
  5. android 11.0 控制Camera开启功能实现
  6. syntax error怎么解决
  7. 苹果手机双指、三指等多种手势,升级iOS13,有了这么多新操作?
  8. 海明校验码c语言源代码,校验码辅导之海明校验
  9. 零基础学习HTML5
  10. mac电脑使用nvm控制node版本