多个生产者多个消费者,只有5个包子
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个包子相关推荐
- 生产者和消费者问题(单一生产者和单一消费者)
题目一:一组生产者和一组消费者进程共享一个初始为空,大小为n的缓冲区,只有缓冲区没有满的时候,生产者才能把消息放入缓冲区,否则必须等待:只有缓冲区未空时,消费者才可以从中取出消息,否则必须等待.由于缓 ...
- C#中生产者线程和消费者线程同步的实现
运行结果: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...
- kafka消费者如何读同一生产者消息_Kafka消费者生产者实例
为了更为直观展示Kafka的消息生产消费的过程,我会从基于Console和基于Application两个方面介绍使用实例.Kafka是一个分布式流处理平台,具体来说有三层含义: 它允许发布和订阅记录流 ...
- (王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题
注意:生产者与消费者问题Linux系统编程专栏有案例讲解 Linux系统编程39:多线程之基于阻塞队列生产者与消费者模型 Linux系统编程40:多线程之基于环形队列的生产者与消费者模型 本文接:(王 ...
- Kafka学习笔记 --- 生产者producer与消费者关系comsumer
生产者:生产者可以将数据发布到所选择的topic(主题)中.生产者负责将记录分配到topic的哪一个 partition(分区)中.可以使用循环的方式来简单地实现负载均衡,也可以根据某些语义分区函数( ...
- springboot 与rabbitmq集成+生产者投递确认+消费者手动确认+TTL+死信队列+延时队列
1.生产者的消息可靠性投递机制 1)springboot yml文件配置 spring:rabbitmq:host: 10.0.23.83username: lifwepassword: 123456 ...
- 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 ...
- kafka java api 生产者 producer 与消费者consumer
c踩坑 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic HelloWorld 将localhost必须和 ...
- Rocketmq同项目多个生产者多个消费者问题
项目中经常会遇到一个项目需要多个mq实例的情况,然后我们就启动了多个mq: 另一个也同样此种方法启动,@Bean对象的bean名称不一样. 但是用的时候发现无论用哪个生产者实例,发送的消息总是到同一个 ...
最新文章
- mongodb 压缩——3.0+支持zlib和snappy
- FastDFS分布文件系统
- SSH框架实现仿淘宝购物demo
- [云炬创业基础]创业过程
- 优美的测试代码 - 行为驱动开发(BDD)
- 投入工作与生活幸福,并非简单对立
- Home Assistant系列 -- 设置界面语言与地理位置
- NetSpeedMonitor
- python爬虫框架论文开题报告范文_基于Web爬虫系统设计开题报告
- MiniUtilityFramework 九 CText和TEXT
- Matplotlib系列(三):坐标轴变换及注释
- 岗位、职位、职级、职务的区别
- 立方人物|吴胜男律师:一位温而不沸的90后执行主任
- lsdyna批处理求解工具使用
- conda离线安装包
- 【机器学习课程-华盛顿大学】:4 聚类和检索 4.4 MoG混合高斯模型和EM估计最大化
- 数组去重与数组合并去重
- 简单使用OnlyOffice
- 开源文件文档在线预览项目解决方案kkFileView本地搭建运行与Docker部署运行
- 高级工计算机操作系统试题及答案,计算机系统操作高级工试题和答案[1].