基于链表的生产者-消费者FIFO队列
queue是一个FIFO的链表队列,Producer负责生产QueueItem,一旦生产完成就添加到queue末尾。Consumer不停的consume queue中的QueueItem,若某一时刻consume完了就转入等待Producer生产新的QueueItem,一旦queue中出现新的未consume QueueItem则立即进行consume.
Consumer.run()
{
while(true)
{
synchronized(queueLock)//加锁monitor
{
while(queue == null)
{
try
{
queueLock.wait();//释放monitor并block,重新返回执行时将重新获得monitor
}
catch(InterruptedException e) {}
}
dat = queue.data;
queue = queue.next;
}
...
dat处理逻辑
...
}
}
Producer.produce(QueueItem item)
{
synchronized(queueLock)
{
if(queue == null)
queue = item;
else
{
QueueItem cur = queue;
while(true)
{
if(cur.next != null) cur = cur.next;
else break;
}
cur.next = item;
}
queueLock.notifyAll();
}
}
给消费者线程增加停止开关
增加private开关字段:
private volatile boolean Consumer.stopped;
增加public的开关操纵方法:
public void killConsumer()
{
stopped = true;
}
Consumer.run()
{
while(!stopped) //改变Consumer线程循环条件
{
synchronized(queueLock)
{
while(queue_item == null && !stopped)//在队列空时判断是否已经被杀
{
try
{
queueLock.wait();
}
catch(InterruptedException e) {}
}
if(queue_item != null)
{
dat = queue.data;
queue = queue.next;
}
}
if(dat != null)
{
...
dat处理逻辑
...
}
}
}
分享到:
相关推荐
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
利用线程间的通信主要是因为当多个线程同时对一个对象进行访问的时候,多个线程之间是一个协助的关系,举个例子就是今天要说的生产这和消费者模型。
java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...
java生产者消费者模型
使用wait()和notify()实现的生产者与消费者模型,可以了解如何使用wait()和notify()进行线程间通信。(上一次上传的代码有一个问题没有考虑到,这次修补了——CSDN没法撤销资源,只能再上传了)
基本满足操作系统课上要求,java实现的生产者消费者模型。
设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。说明:有界缓冲区内设有20 个存储单元,放入/取出的数据项设定为1‐20 这20 个整型数。设计要求:1)每个生产者和消费者对有界缓冲区...
java多线程_消费者与生产者模型
java 多线程生产者消费者模型demo
606_rocketMQ实战-生产者与spring结合 707_rocketMQ实战-消费者与spring结合 808_rocketMQ实战-数据库模型设计 909_rocketMQ实战-数据库DAO代码生成 1010_rocketMQ实战-远程RPC接口设计与实现(一) 1111_rocketMQ...
Java实现生产者消费者模型 生产者消费者模型,是一般面试题都会考的,下面介绍使用ReetrantLock实现 生产者消费者模型。 定义一个ReentrantLock锁,同时new出两个condition,一个控制队满,一个 控制队空 //生产者 ...
自己用Java写的简单生产者与消费者模型
理解java中生产者消费者模型,以及如何利用双缓冲机制来解决同步与死锁问题。
以车库为例子,一组生产者向一组消费者提供消息,它们共享一个有界缓冲池,生产者向其中投放消息,消费者从中取得消息。 根据进程同步机制,编写一个解决上述问题的可视化程序,可显示缓冲池状态、放数据、取数据等...
主要介绍了Java实现简易生产者消费者模型过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
本课程设计的目的是通过设计一个消费者进程与生产者进程的同步模拟系统,认识进程间的同步机制生产者消费者问题是一个著名的进程...这是一个用Eclipse为工具、java为编程语言而实现模拟消费者进程与生产者进程的同步。
所谓的生产者消费者模型,是通过一个容器来解决生产者和消费者的强耦合问题。通俗的讲,就是生产者在不断的生产,消费者也在不断的消费,可是消费者消费的产品是生产者生产的,这就必然存在一个中间容器,我们可以把...
NULL 博文链接:https://ruyi574812039.iteye.com/blog/2097988
Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java...