`
hbkh2000
  • 浏览: 203656 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java多线程 生产者-消费者模式

阅读更多

 1.生产者-消费者模式实现概述
  生产者与消费者模式是我们在编程过程中经常会遇到的,就像我们生活那样,生产者生产出产品,消费者去购买产品。在这里我们创建三个线程,一个主控线程main,用于创建各辅助线程;一个生产者线程,用于生产产品;一个消费者线程,用于购买产品。另外,我们创建一个队列类Queue,生产线程生产的产品将放置到该队列中,然后消费者线程在该队列中取走产品。
  2.实现该模式的要点:
  首先必须让生产者线程与消费者线程达到同步,也就是说,当生产者线程生产出产品后,消费者才能去取,依此轮回。当生产者线程放置产品到队列中时,队列要检查队列是否已满,如已满,则等待消费者线程将产品取走,否则放置产品到队列中。当消费者线程在队列中取产品时,队列也要检查队列是否为空,如果为空,则等待生产者线程放置产品到队列,否则在队列中取走产品。
  3.源代码:见附件

分享到:
评论
3 楼 j_peng 2012-03-09  
ccxw1983 写道
运行下就不动了,也不死,运行结果:
c2要消费80个,由于现在只有50个,c2于是去等待!
c1要消费70个,由于现在只有50个,c1于是去等待!
P1生产了50个,现在有100个。
P2生产了200个,现在有300个。
P3要生产290个,当前300个,产品充足,不需要生产,P3去等待!
c1消费了70个,现在还剩下230个
c2消费了80个,现在还剩下150个
P3要生产290个,当前150个,产品充足,不需要生产,P3去等待!

2 楼 ccxw1983 2010-09-05  
运行下就不动了,也不死,运行结果:
c2要消费80个,由于现在只有50个,c2于是去等待!
c1要消费70个,由于现在只有50个,c1于是去等待!
P1生产了50个,现在有100个。
P2生产了200个,现在有300个。
P3要生产290个,当前300个,产品充足,不需要生产,P3去等待!
c1消费了70个,现在还剩下230个
c2消费了80个,现在还剩下150个
P3要生产290个,当前150个,产品充足,不需要生产,P3去等待!
1 楼 wangweiufofly 2009-12-31  
很简单,但是很清晰,非常感谢,理解又深了些~

相关推荐

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

    通过理解和掌握这些知识点,开发者能够有效地实现生产者-消费者模式,解决并发编程中的数据共享和协作问题。在实际项目中,这个模式常用于优化系统性能,尤其是在I/O密集型或计算密集型的应用中。

    生产者-消费者多线程处理

    在Java中,可以使用`BlockingQueue`接口来实现生产者-消费者模式,它已经内置了线程安全的队列操作。生产者可以使用`offer()`方法添加元素,消费者则用`take()`方法取出元素,这两个方法会自动处理等待和唤醒操作。 ...

    java 多线程 生产者消费者模式

    Java多线程编程是开发高并发、高性能应用的关键技术之一,而生产者消费者模式是多线程编程中常用的一种设计模式。它通过分离数据的生产和消费过程,实现了线程间的协同工作,有效避免了资源的竞争和浪费。在这个模式...

    java多线程(生产者与消费者)

    生产者消费者模式是一种设计模式,它描述了两个不同类型的线程如何协作完成工作:生产者负责生成数据,而消费者负责消耗这些数据。为了使这个模式在多线程环境下安全运行,我们需要使用Java中的同步机制。 1. **...

    【IT十八掌徐培成】Java基础第08天-04.多线程-生产者-消费者.zip

    通过学习和实践"生产者-消费者"模型,开发者能够更好地理解和掌握Java多线程的精髓,为构建高并发、高效率的应用打下坚实的基础。在实际项目中,这种模型常被用于实现缓存管理、消息队列以及数据库连接池等场景。

    java 多线程 生产者消费者模式源码

    java 多线程 生产者消费者模式,多个生产者对多个消费者,使用jdk 线程池及 BlockingQueue实现,解决了待生产的任务生产完成后,正常终止所有线程,避免线程(特别是消费者线程)因阻塞而无限等待的情况。源码中还简单...

    【IT十八掌徐培成】Java基础第08天-05.多线程-生产者-消费者2.zip

    通过理解并熟练运用生产者-消费者模式,开发者可以构建高效、可靠的多线程应用,处理并发问题,并优化系统资源的利用率。在Java中,这一模式的应用不仅限于简单的队列操作,还可以扩展到更复杂的并发场景,如分布式...

    多线程简易实现生产者消费者模式

    生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...

    多线程间通信:多生产者-多消费者实例

    总之,多生产者-多消费者模式是并发编程中的重要设计模式,通过合理利用同步机制,能够有效地解决线程间的通信问题,提高系统的并发性能。在Java中,我们可以借助`BlockingQueue`等工具实现这一模式,从而构建高效、...

    多线程_生产者与消费者模式示例

    在描述中提到的链接(),博主分享了一个关于多线程生产者与消费者模式的具体实现案例。虽然具体代码没有给出,但我们可以根据常见的实现方式来解析这个模式。 1. **共享数据结构**:在这个模式中,通常会有一个...

    java多线程例子-生产者消费者

    生产者消费者模式的基本概念是有一个共享资源,即队列,在这里作为数据缓冲区。生产者线程负责将产品(数据)放入队列,而消费者线程则负责从队列中取出并消费这些产品。这个过程需要确保线程安全,避免数据竞争和...

    Java多线程生产者消费者模式实现过程解析

    Java多线程生产者消费者模式实现过程解析 Java多线程生产者消费者模式是指在Java编程中,使用多线程来实现生产者和消费者之间的数据交换 и处理的模式。该模式下,生产者负责产生数据,而消费者负责处理数据。这种...

    JAVA_生产者-消费者

    4. **适用场景**:生产者-消费者模式广泛应用于多线程系统,如数据库连接池、消息队列、任务调度等。在这些场景中,生产者通常代表数据的生成或任务的提交,而消费者则负责处理这些数据或执行任务。 总结来说,...

    java 多线程生产者消费者模型demo

    Java多线程生产者消费者模型是一种典型的线程协作模式,用于解决并发编程中资源的高效利用和同步问题。在这个模型中,"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。为了实现这种模式,Java提供了...

    模拟“生产者-消费者”解决过程及方法

    生产者-消费者问题可以关联到软件设计模式中的"生产者-消费者模式"和"阻塞队列模式"。这些模式在多线程编程中广泛应用于处理异步任务和数据流。 6. **优化策略**: - **批量生产/消费**:生产者一次性生产多个...

    生产者和消费者模式多线程

    生产者和消费者模式是多线程编程中一个经典的设计模式,它主要解决的是在多线程环境下资源的有效利用和同步问题。在这个模式中,生产者负责生成数据,而消费者负责消费这些数据。为了保证生产与消费的平衡以及避免...

    JAVA课程设计(生产者-消费者问题)

    总结来说,这个JAVA课程设计旨在通过生产者-消费者问题,让学生掌握Java多线程编程,理解线程同步与通信的重要性,以及如何在实际场景中运用这些概念,提高并发编程能力。通过这个项目,学生可以学习到如何设计并...

    图解java多线程设计模式-结城浩-完整高清带书签版本

    6. **并发设计模式**:书中介绍了如生产者消费者模式、单例模式、读写锁模式等多种适用于多线程环境的设计模式,帮助开发者构建更健壮的并发程序。 7. **并发工具类**:除了基本的同步机制外,书中还详细讨论了java...

Global site tag (gtag.js) - Google Analytics