package demo;
import java.util.ArrayList;
import java.util.List;
/*
生产者/消费者模式
假设有这样一种情况:有一个盘子,盘子里只能放一颗鸡蛋。A专门往盘子里放鸡蛋,如果盘子里有鸡蛋,则一直等到盘子里没鸡蛋;
B专门从盘子里拿鸡蛋,如果盘子里没鸡蛋,则等待直到盘子里有鸡蛋。
* */
public class Plate {
private List<Egg> eggs = new ArrayList<Egg>(1);
public synchronized Egg getEgg(){
while(eggs.size() == 0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Egg egg = eggs.get(0);
System.out.println("拿到鸡蛋");
eggs.clear();//清空盘子
notify();//唤醒放鸡蛋线程,使放鸡蛋线程放鸡蛋
return egg;
}
public synchronized void putEgg(Egg egg){
while(eggs.size() > 0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
eggs.add(egg);//往盘子里放鸡蛋
System.out.println("放入鸡蛋");
notify();//唤醒取鸡蛋线程,使取鸡蛋线程取鸡蛋
}
static class PutEggThread extends Thread{
private static final int PUT_EGG_TIMES = 5;
private Plate plate;
分享到:
相关推荐
在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数...产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。
生产者 消费者 模式 c++ 算是老外写的一个使用demo 可以参考一下
生产者消费者模式.doc生产者消费者模式.doc生产者消费者模式.doc
使用多线程实现了生产者和消费者模式
labview 基于事件的生产者消费者模式
NULL 博文链接:https://xiongjiajia.iteye.com/blog/2325943
生产者/消费者循环结构是最常用的LabVIEW开发模式,通过并行的方式实现了多个循环分别扮演不同角色的功能,本集作为三部曲的基础篇,为您详细解说该结构的原理以及队列的基本用法。
自己空闲时间写的一个生产者和消费者模式。中间使用了中介者设计模式。大家可以参考下。
使用Qt 和 C++11 的std::mutex 和 std::condition_variable 实现一个演示生产者消费者模式的Qt工程。
网络讲坛:生产者/消费者循环上集rar,生产者/消费者循环结构是最常用的LabVIEW开发模式,通过并行的方式实现了多个循环分别扮演不同角色的功能,本集作为三部曲的基础篇,为您详细解说该结构的原理以及队列的基本...
生产者消费者synchronized实现方式
用java多线程简易实现生产者消费者模式的代码,用java多线程简易实现生产者消费者模式的代码。
LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC...
读《深入理解计算机系统》后,参照书中程序,用C代码实现生产者消费者模型,本代码可移植性强,各接口以封装好,并有注释
主线程、生产者线程(一)、消费者管理线程(一)、消费者线程(多),以及一些全局变量。 主线程职责:UI控件的控制和显示、控制生产者:调节生产的速度和暂停与继续、控制消费 生产者线程职责:根据商品数量调控...
java 多线程 生产者消费者模式,你值得拥有
redis 老版本生产者消费者模式
界面化模拟生产者消费者模式,生产者生产数据数量和消费者消费数据数量可自定义输入,仓库内最大数量和最小剩余量以及生产者每次生产数量和消费者每次消费数量都可以自定义输入
C语言实现生产者消费者问题,分配具有n个缓冲区的缓冲池,作为共享资源。 定义两个资源型信号量empty 和full,empty信号量表示当前空的缓冲区数量,full表示当前满的缓冲区数量。 定义互斥信号量mutex,当某个进程...
java多线程实现生产者和消费者