文档章节

多个生产者多个消费者,只有5个包子

f
 flyqilong
发布于 2015/12/22 21:19
字数 333
阅读 21
收藏 0
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();// 唤醒当前等待的一个线程
}
}
}
}

© 著作权归作者所有

f
粉丝 3
博文 93
码字总数 53900
作品 0
Android工程师
私信 提问
Python 并行分布式框架 Celery

版权声明:本文为博主原创文章,转载请注明来源。开发合作联系luanpenguestc@sina.com https://blog.csdn.net/luanpeng825485697/article/details/82829738 在学习Celery之前,我先简单的去了...

数据架构师
2018/09/24
0
0
springboot+rabbitmq整合

1.安装好rabbitmq 2.新建一个springBoot项目:rabbitmq_demo 3.添加pom依赖: 4.application.properties: 5.启动类声明一个Queue,用于测试: 多场景实现: 1.单生产者和单消费者 生产者1: ...

狼王黄师傅
2018/10/19
0
0
celery学习笔记

生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程等)。产生数据的...

_周小董
2018/01/04
0
0
从生产者-消费者模型了解线程、同步、锁(java)

代码主要包括4个类和1个测试类: 1、Egg 类: 鸡蛋,可以由生产者放入到篮子中,供消费者消费食用。 2、Blanket 类:一个篮子,最多能装5个鸡蛋。 3、Producer 类: 生产者(可以有1个或多个,...

梅超疯
2015/01/26
0
0
Python自动化开发学习9-多线程、队列

threading 模块 先理解一下进程与线程的概念和区别,然后通过threading模块来学习理解线程。进程要下次讲了。之后看一下两种调用线程的方式,效果和实现都一样。貌似也没有什么时候用哪种,反...

骑士救兵
2017/12/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

URL/URI/URN的认识

这两天在写代码的时候,由于涉及到资源的位置,因此,需要在Java Bean中定义一些字段,用来表示资源的位置,比如:imgUrl,logoUri等等。但是,每次定义的时候,心里都很纠结,是该用imgUrl还...

WinkJie
6分钟前
0
0
vs2017 踩坑

好久没有使用vs2017,改了下代码,启动调试进行测试,一没有注意,就启动了。 然后 ,悲剧了,,,就有下面的问题。 VS断点提示:当前不会命中断点。还没有为该文档加载任何符号 然后百度了下,...

轻轻的走过
7分钟前
0
0
解决一个emqttd trace 无法打开的问题

emqttd这个东西做的真心不咋地,之前有emq_auth_mysql的plugin死活无法启动的问题,现在又碰到trace无法打开的问题。 查看emqttd服务器当前连接的所有client: emqttd_ctl clients list 要打...

莫在全
14分钟前
0
0
java wsdl 中不显示参数属性类型的问题解决方案

CXF3.0.1解决方案: 配合spring方式 <jaxws:endpoint id="receiveUMSMessageService" implementor="com.sw.extInterface.webservice.service.impl.ReceiveUMSMessageServiceImpl" address="......

嘿嘿嘿IT
17分钟前
0
0
go alpine docker image 搭建

Dockerfile 搭建 目录结构 --Dockerfile--main.go 写一个go的helloworld package mainimport ("fmt""log""net/http")func main() {http.HandleFunc("/", hello)err := ht......

solate
24分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部