2019独角兽企业重金招聘Python工程师标准>>>

package com.reveiew;
/** 多个生产者多个消费者,只有5个包子* 跟第一,第二的例子不同的是,不是new一个对象调用锁,而是用BaoZi.calss直接调用锁*/
public class MoreProuduceCustomMoreBaoZi {
public static void main(String[] args) {
Produce3 p = new Produce3();
p.setName("生产者");
Produce3 p2 = new Produce3();
p2.setName("生产者2");
Produce3 p3 = new Produce3();
p3.setName("生产者3");
customer3 c = new customer3();
c.setName("消费者");
customer3 c2 = new customer3();
c2.setName("消费者2");
customer3 c3 = new customer3();
c3.setName("消费者3");
p.start();
c.start();
p2.start();
c2.start();
p3.start();
c3.start();
}
}
class BaoZi3 {
public static int num = 0;
}
class Produce3 extends Thread {
public void run() {
while (true) {
synchronized (BaoZi3.class) {
while (BaoZi3.num >=5) {
// 等着消费者消费.生产者应该等待。需要用锁去调用wait方法。
try {
BaoZi3.class.wait();// wait会释放锁//哪个线程执行就是哪个线程等
} catch (InterruptedException e) {
e.printStackTrace();
}
}
BaoZi3.num++;
try {
Thread.sleep(1000);// sleep不会释放锁
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "生产一个包子"+"剩余包子"+BaoZi3.num);
BaoZi3.class.notifyAll();// 唤醒消费者
}
}
}
}
class customer3 extends Thread {
public void run() {
while (true) {
synchronized (BaoZi3.class) {
while (BaoZi3.num == 0) {
try {
BaoZi3.class.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
BaoZi3.num--;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "消费一个包子"+"剩余包子"+BaoZi3.num);
// 唤醒消费者
BaoZi3.class.notifyAll();// 唤醒当前等待的一个线程
}
}
}
}

转载于:https://my.oschina.net/u/2541146/blog/549278

多个生产者多个消费者,只有5个包子相关推荐

  1. 生产者和消费者问题(单一生产者和单一消费者)

    题目一:一组生产者和一组消费者进程共享一个初始为空,大小为n的缓冲区,只有缓冲区没有满的时候,生产者才能把消息放入缓冲区,否则必须等待:只有缓冲区未空时,消费者才可以从中取出消息,否则必须等待.由于缓 ...

  2. C#中生产者线程和消费者线程同步的实现

    运行结果: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...

  3. kafka消费者如何读同一生产者消息_Kafka消费者生产者实例

    为了更为直观展示Kafka的消息生产消费的过程,我会从基于Console和基于Application两个方面介绍使用实例.Kafka是一个分布式流处理平台,具体来说有三层含义: 它允许发布和订阅记录流 ...

  4. (王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题

    注意:生产者与消费者问题Linux系统编程专栏有案例讲解 Linux系统编程39:多线程之基于阻塞队列生产者与消费者模型 Linux系统编程40:多线程之基于环形队列的生产者与消费者模型 本文接:(王 ...

  5. Kafka学习笔记 --- 生产者producer与消费者关系comsumer

    生产者:生产者可以将数据发布到所选择的topic(主题)中.生产者负责将记录分配到topic的哪一个 partition(分区)中.可以使用循环的方式来简单地实现负载均衡,也可以根据某些语义分区函数( ...

  6. springboot 与rabbitmq集成+生产者投递确认+消费者手动确认+TTL+死信队列+延时队列

    1.生产者的消息可靠性投递机制 1)springboot yml文件配置 spring:rabbitmq:host: 10.0.23.83username: lifwepassword: 123456 ...

  7. 4.2.10 Kafka源码剖析, 阅读环境搭建, broker启动流程, topic创建流程, Producer生产者流程, Consumer消费者流程,

    目录 4.1 Kafka源码剖析之源码阅读环境搭建 4.1.1 安装配置Gradle 4.1.2 Scala的安装和配置 4.1.3 Idea配置 4.1.4 源码操作 4.2 Kafka源码剖析之B ...

  8. kafka java api 生产者 producer 与消费者consumer

    c踩坑 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic HelloWorld 将localhost必须和 ...

  9. Rocketmq同项目多个生产者多个消费者问题

    项目中经常会遇到一个项目需要多个mq实例的情况,然后我们就启动了多个mq: 另一个也同样此种方法启动,@Bean对象的bean名称不一样. 但是用的时候发现无论用哪个生产者实例,发送的消息总是到同一个 ...

最新文章

  1. mongodb 压缩——3.0+支持zlib和snappy
  2. FastDFS分布文件系统
  3. SSH框架实现仿淘宝购物demo
  4. [云炬创业基础]创业过程
  5. 优美的测试代码 - 行为驱动开发(BDD)
  6. 投入工作与生活幸福,并非简单对立
  7. Home Assistant系列 -- 设置界面语言与地理位置
  8. NetSpeedMonitor
  9. python爬虫框架论文开题报告范文_基于Web爬虫系统设计开题报告
  10. MiniUtilityFramework 九 CText和TEXT
  11. Matplotlib系列(三):坐标轴变换及注释
  12. 岗位、职位、职级、职务的区别
  13. 立方人物|吴胜男律师:一位温而不沸的90后执行主任
  14. lsdyna批处理求解工具使用
  15. conda离线安装包
  16. 【机器学习课程-华盛顿大学】:4 聚类和检索 4.4 MoG混合高斯模型和EM估计最大化
  17. 数组去重与数组合并去重
  18. 简单使用OnlyOffice
  19. 开源文件文档在线预览项目解决方案kkFileView本地搭建运行与Docker部署运行
  20. 高级工计算机操作系统试题及答案,计算机系统操作高级工试题和答案[1].

热门文章

  1. Dubbo入门----搭建一个最简单的Demo框架
  2. Ansible11:变量详解
  3. AKKA文档(java)——术语,概念
  4. Vagrant常见问题汇总
  5. 使用 ExpandableListView 实现折叠ListView
  6. outlook 2010邮件传输接口错误解决一例
  7. Winfrom打印表单
  8. 问题四十三:对ray tracing圆环图形中的细微问题进行修正
  9. 伪随机算法c语言,伪随机算法实现各语言实现示例。
  10. java 爬 维基百科_爬取维基百科词条