`
chong_zh
  • 浏览: 71969 次
  • 来自: 杭州
社区版块
存档分类
最新评论

Java的消费者-生产者模型实现总结

 
阅读更多
基于链表的生产者-消费者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“生产者-消费者”模型实现。通过这样的设计,我们可以有效地控制生产者和消费者的执行顺序,确保了数据的正确性,并且避免了先消费后生产的情况。在实际应用中,可能需要根据具体需求进行优化...

    操作系统-消费者-生产者安卓实现

    为了协调主线程和后台线程之间的交互,避免阻塞UI,我们需要用到消费者-生产者模型。 3. **解决方法:线程同步与信号量**: 在安卓中,我们通常使用`java.util.concurrent`包中的工具类来实现线程同步,如`...

    java实现多线程经典模型生产者消费

    java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...

    java生产者消费者模型

    Java中实现生产者消费者模型通常会用到以下关键概念和技术: 1. **阻塞队列(BlockingQueue)**:这是生产者消费者模型的核心组件,用于存储待消费的数据。Java的`java.util.concurrent`包提供了多种阻塞队列实现,...

    自己用Java写的简单生产者与消费者模型

    在Java中实现生产者-消费者模型时,通常会用到`java.lang.Thread`类或`java.util.concurrent.ExecutorService`接口来创建和管理线程,同时利用`synchronized`关键字、`wait()`、`notify()`或`notifyAll()`方法来实现...

    java多线程实现生产者和消费者

    生产者和消费者线程都需要有自己的业务逻辑,这可以通过重写`run()`方法实现。 2. **共享资源**:在生产者-消费者模型中,通常会有一个固定大小的缓冲区作为共享资源。可以使用数组或链表实现,但需要注意的是,当...

    java多线程经典模型生产者消费者

    java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...

    计算机操作系统实验-生产者和消费者(java)

    生产者-消费者模型在 Java 中的实现 在计算机操作系统中,生产者-消费者模型是一种常见的同步机制,用于解决多线程之间的数据共享和访问问题。在 Java 中,我们可以使用多线程编程和同步机制来实现生产者-消费者...

    java多线程_消费者与生产者模型

    在Java多线程编程中,消费者-生产者模型是一种经典的线程间通信模式,用于解决多线程环境...总之,消费者-生产者模型是Java多线程编程中的一个重要概念,掌握其原理和实现对于构建高效、可靠的多线程应用程序至关重要。

    Java多线程-生产者与消费者问题

    ### Java多线程-生产者与消费者问题 #### 一、生产者与消费者问题概览 **1.1 概要** 生产者与消费者问题是计算机科学中一个多线程同步的经典问题。它描述了两个线程如何共享有限资源的场景:一个是生产者...

    java生产者-消费者

    根据提供的文件信息,我们可以深入探讨Java中的生产者-消费者模式,并通过具体的代码示例来解析这一模式的关键概念和技术实现。 ### Java生产者-消费者模式概述 生产者-消费者模式是多线程编程中的一种经典模式,...

    随意写的 消费者-生产者 示例

    在Java或者其他支持多线程的编程语言中,实现消费者-生产者模型通常会用到线程安全的数据结构(如阻塞队列)和同步原语(如wait、notify和notifyAll)。在这个示例中,可能包含一个队列用于存储生产者生成的数据,...

    JAVA_生产者-消费者

    总结来说,"JAVA_生产者-消费者"是一个经典的并发编程模型,它利用Java的线程同步机制和`BlockingQueue`接口来实现高效的数据交换。理解并熟练掌握这一模式对于开发高并发、高性能的Java应用至关重要。通过学习和...

    生产者 消费者 进程 可视化 java

    在Java编程中,"生产者-消费者"模型是一种常见的多线程问题,它涉及到进程间的同步与通信。在这个模型中,生产者线程负责生成数据并放入缓冲区,而消费者线程则负责从缓冲区取出数据进行处理。这里的"车库"例子就是...

    Java 线程间通信,生产者与消费者模型

    使用wait()和notify()实现的生产者与消费者模型,可以了解如何使用wait()和notify()进行线程间通信。(上一次上传的代码有一个问题没有考虑到,这次修补了——CSDN没法撤销资源,只能再上传了)

    java实现生产者消费者

    总结,Java实现的生产者消费者模式利用`BlockingQueue`接口来协调生产者和消费者的动作,确保资源的有效管理和合理分配。通过这种方式,我们可以构建高效、稳定且线程安全的并发程序。在`src`文件夹中,可能包含的是...

    编程模拟实现生产者-消费者进程

    ### 编程模拟实现生产者-消费者进程 #### 生产者-消费者问题概述 生产者-消费者问题是操作系统中进程间通信的经典案例之一。该问题主要描述了一组生产者进程不断生成数据并将其放置在一个共享缓冲区中,而一组消费...

    java中生产者和消费者模型

    总的来说,Java中的生产者-消费者模型是通过线程同步机制实现的,主要涉及`synchronized`关键字和`wait()`, `notify()`, `notifyAll()`方法,以及各种缓冲区策略,如双缓冲区,来保证线程安全和高效的数据处理。...

    生产者与消费者 java实现

    本主题将深入探讨生产者与消费者模型的Java实现。 生产者与消费者问题的核心是有一个共享资源(例如,一个缓冲区),生产者不断地生产产品并放入缓冲区,而消费者则从缓冲区取出产品进行消费。关键在于确保生产者...

Global site tag (gtag.js) - Google Analytics