生产者消费者模型
四步骤
生产者在仓满时等待,空仓则生产
消费者在仓满时取物,在仓空时等待
生产者在仓空时生产并通知消费者消费
消费者在仓满时取出产品并通知生产者
其实就我个人的认识与理解,生产者与消费者就是对于同一件东西或资源进行操作。生产者生成,消费者对其生成的东西进行消费
这里我给一个简单的生产消费模型:
生产者:
public class produce extends Thread{
//声明一个队列对象,用来存储
private LinkedList list ;
int count =0 ;
/**
*构造器
*
*/
public produce(LinkedList list){
this.list = list ;
}
/**
*重写run方法
*/
public void run(){
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(list){
while(list.size()==0){
//生产产品
Box box = new Box();
box.id = ++count;
box.name = "app"+box.id;
list.add(box);
list.notify();
}
while(list.size()>0){
try {
list.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
消费者:
public class customer extends Thread{
//声明一个队列来存储
private LinkedList list ;
/**
* 构造方法
*/
public customer(LinkedList list){
this.list = list ;
}
public void run(){
while(true){
synchronized (list) {
//判断队列是否为空
while(list.size()==0){
try {
list.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
while(list.size()>0){
System.out.println("消费者拿走了产品!"+ list.getFirst().toString() );
list.remove();
list.notify();
}
}
}
}
}
我在这只写了一个最简单的模型,生产者在队列为空时生产,不为空时则等待;消费者在队列为空时等待,在队列不为空时的消费。
生产者与消费者模型,我觉得用双缓冲对列实现更为灵活。这里实现双缓冲与线程同步有关,线程同步我会在以后再说的。线程同步的关键字啊:synchronized 。
分享到:
相关推荐
C++实现生产与消费者模型,利用锁实现互斥。
LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC...
多线程实现生产者消费者模型:锁(Lock)、信号量(Semaphore、BoundedSemaphore)、条件(Condition)、队列(Queue)、事件(Event) 多进程程实现生产者消费者模型:信号量(Semaphore)、条件(Condition)、...
Qt入门练习项目——生产者消费者模型 Qt入门练习项目源码,通过本项目从而了解Qt,进行一个简单的入门。 本文件是对应项目源码,希望多多交流。
java生产者消费者模型
使用wait()和notify()实现的生产者与消费者模型,可以了解如何使用wait()和notify()进行线程间通信。(上一次上传的代码有一个问题没有考虑到,这次修补了——CSDN没法撤销资源,只能再上传了)
生产者,消费者,线程同步,模型,锁
基于Linux C++的条件变量实现的生产者消费者模型,旨在进一步帮助读者理解条件变量的使用。
LINUX下的生产者消费者模型算法 利用进程模拟生产者消费者,利用共享存储区模拟缓冲区
内容:编程实现生产者-消费者问题的模拟。 基本要求: 1. 生产者消费者对缓冲区进行互斥操作。 2. 缓冲区大小为10,缓冲区满则不允许生产者生产数据,缓冲区空则不允许消费者消费数据。 3. 生产者消费者各循环操作10...
用Qt实现的生产者消费者模型(多进程),操作系统课程作业。 4消费者,4生产者,12缓冲区,可视化展示。
大学计算机专业,操作系统实验报告,生产者消费者模型模拟进程调度
生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和...
内容概要:基于QT Creator环境的多线程编程验证互斥的原理,通过使用semaphore,mutex等控制变量,实现对生产者消费者模型的真实模拟。 适合人群:初学操作系统的学生 能学到什么:调用了Qt多线程类库QThread进行...
自己用Java写的简单生产者与消费者模型
有两个版本,第一个用原子操作来解决(A版本),第二个用信号量实现(B版本),新建一个文件夹,直接双击打开cpp文件调用VC6 IDE,直接编译运行即可 主要用到了windows的信号量semaphore、interLock等工具
这是本人学习labview生产者消费者模型时,收藏的资料,里面包含生产消费者模型的文档介绍和例程,保证资源真实有效,例程能跑。
结合System V信号量机制,利用Linux下的多线程库实现了Linux下的操作系统生产者-消费者模型,具体原理可参考博文:: http://blog.csdn.net/Mikeoperfect/article/details/79431642
RocketMQ生产消费者模型实现
java多线程_消费者与生产者模型