`
生亦何欢
  • 浏览: 11467 次
社区版块
存档分类
最新评论

BlockingQueue深入理解生产者消费者模式

 
阅读更多

http://www.cnblogs.com/samqiu/p/4279836.html

这个博客已经很仔细的介绍了BlockingQueue.
我现在修改几个方法来说明BlockingQueue几个方法的区别。

1。修改等待时间
消费者等待时间非常短,没有产品加到队列
String data = queue.poll(20, TimeUnit.MILLISECONDS);


打印出的消息:
引用
启动生产者线程!
正在生产数据...
启动消费者线程!
启动生产者线程!
正在生产数据...
启动生产者线程!
正在生产数据...
正从队列获取数据...
退出消费者线程!
将数据:data:1放入队列...
将数据:data:2放入队列...


生产者要过两秒才会加入产品,现在没有产品消费者则强制退出。所以大于10后面数据放入的时候全是失败。

2。修改Blockingqueue的容量(用ArrayBlockingQueue)。
BlockingQueue<String> queue = new ArrayBlockingQueue<String>(1); 


上面的例子可以看到,从2开始,所有放入数据都是失败。

3。把消费者中poll改为take。
String data = queue.take();


结果是所有的生产者结束后,消费者会继续等待queue(被阻塞),如果不用BlockingQueue就需要用wait和notify来实现继续等待,而不BlockoingQueue内部实现了这个阻塞的功能。


理解BlockingQueue对JAVA 线程池里面的Queue也会有非常大的帮助。刚刚看线程池的时候不理解BlockingQueue。如果深刻理解了BlockingQueue后,对线程池也就知道了它的管理队列的方法,线程池的几种初始函数就是BlockingQueue的几种不同Type。
有边界的线程池;ArrayBlockingQueue
无边界的线程池:LinkedBlockingQueue
Direct handoffs:SynchronousQueue

分享到:
评论

相关推荐

    Java 生产者消费者模式

    在Java编程中,生产者消费者模式是一种典型的多线程协作模型,用于解决系统资源供需不平衡的问题。这个模式的核心思想是将生产数据和消费数据的过程解耦,使得生产者可以独立地生产数据,而消费者可以独立地消费数据...

    Java中的BlockingQueue:深入理解与实践应用

    在Java并发编程中,BlockingQueue是一个非常重要的接口,它提供了线程安全的队列操作,特别是在生产者-消费者模式中发挥着核心作用。本文将深入探讨BlockingQueue的工作原理、常见实现、使用场景以及代码示例。 在...

    生产者消费者演示程序

    通过对这个代码的分析和学习,我们可以更深入地理解多线程同步以及生产者消费者模式在实际应用中的实现方法。 总之,生产者消费者问题是多线程编程中的一个重要概念,它展示了如何通过同步机制来协调不同任务之间的...

    java生产者消费者demo

    在这个"java生产者消费者demo"中,开发者使用了适配器模式来构建解决方案。适配器模式是一种设计模式,它允许不同接口的类协同工作,即使它们原本无法直接交互。在生产者消费者问题中,适配器模式可能被用来协调生产...

    生产者消费者模式+定时任务demo

    在这个"生产者消费者模式+定时任务demo"中,开发者创建了一个示例项目,目的显然是为了深入理解这一设计模式。这个项目中可能包含了以下关键部分: 1. **生产者类(Producer Class)**:生产者负责创建数据并将其放...

    生产者消费者java源码

    在Java中,`BlockingQueue`接口是实现生产者消费者模式的关键组件。它提供了一种线程安全的数据结构,允许线程在尝试插入或删除元素时自动进行阻塞,直到操作可以执行。例如,`ArrayBlockingQueue`或`...

    生产者消费者问题和先来先服务算法

    在Java中,生产者消费者问题的实现通常涉及`BlockingQueue`接口,如`ArrayBlockingQueue`。生产者线程使用`put()`方法添加元素到队列,若队列已满则会被阻塞;消费者线程使用`take()`方法获取并移除元素,若队列为空...

    生产者消费者模型的演变

    总之,生产者消费者模型是并发编程中的基础设计模式,通过合理使用同步工具,如Java的`BlockingQueue`,可以有效地解决多线程环境下的资源分配和协调问题。深入理解这个模型及其演变,对于提升Java并发编程能力...

    生产者与消费者 java实现

    生产者与消费者问题在计算机科学中是一个经典的多线程同步问题,主要涉及到进程间的通信和资源的共享。在Java中,我们通常通过`wait()`、`...理解并掌握生产者与消费者模式有助于编写高效、可靠的多线程应用程序。

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

    首先,让我们理解生产者-消费者模式的基本概念。在Java中,可以使用`java.util.concurrent`包中的`BlockingQueue`接口来实现这种模式。`BlockingQueue`提供了一种线程安全的数据结构,它在生产者添加元素和消费者...

    java生产者消费者模型

    1. **阻塞队列(BlockingQueue)**:这是生产者消费者模型的核心组件,用于存储待消费的数据。Java的`java.util.concurrent`包提供了多种阻塞队列实现,如`ArrayBlockingQueue`、`LinkedBlockingQueue`等。阻塞队列...

    生产者消费者 java

    3. **Java并发工具类**:了解`java.util.concurrent`包下的高级并发工具类(如`BlockingQueue`)可以帮助更高效地实现生产者消费者模型。 4. **异常处理**:正确处理`InterruptedException`等异常对于保持程序的稳定...

    生产者消费者算法

    - 设计模式:生产者消费者模型是一种典型的并发设计模式,了解模式的实现和应用场景。 通过这个课程设计,你将有机会实践这些理论知识,并提升对并发编程的理解和技能。同时,你还可以考虑优化生产者消费者的性能,...

    sheng xiao.rar_生产者消费者

    Java的`java.util.concurrent`包提供了`BlockingQueue`接口,简化了生产者消费者模式的实现。 在实际开发中,"生产者消费者"模式广泛应用于各种场景,如消息队列、数据库连接池、缓存系统等。例如,一个网络服务器...

    多线程实现生产者消费者

    这个项目提供了一个基础的多线程生产者消费者模型实现,可以帮助开发者理解如何在Java中实现并发编程,同时也为解决复杂并发问题提供了实践基础。通过分析和修改这个代码,我们可以深入学习多线程编程的细节,提升...

    生产者消费者问题(JAVA版)

    在Java中,`BlockingQueue`是一个并发容器,它实现了线程安全的队列操作,特别适合于生产者消费者模式。生产者可以将数据放入队列,而消费者可以从队列中取出数据。`BlockingQueue`有三个核心方法:`put()`(用于...

    模仿线程"生产者与消费者"的例子

    4. **扩展性**:生产者-消费者模式很容易扩展,可以通过增加更多的生产者或消费者线程来提高系统的并行处理能力。 5. **应用广泛**:这个模式在各种实际场景中都有应用,如数据库缓存、消息队列等。 在代码实现中...

    java模拟生产者和消费者问题

    Java的并发集合框架提供了`BlockingQueue`接口,它内置了线程安全性和阻塞行为,非常适合实现生产者-消费者模式。`BlockingQueue`有多个实现类,如`ArrayBlockingQueue`、`LinkedBlockingQueue`等,它们自动处理阻塞...

    生产者与消费者实例代码,线程学习必备

    通过深入理解和实践生产者与消费者模型,我们可以更好地掌握多线程编程的精髓,为复杂并发场景设计出高效、稳定的解决方案。如果你已经下载了`ProducerAndConsumer.zip`,可以进一步学习和分析其中的代码,以加深对...

    java生产者消费者

    这个名为"生产者和消费者"的压缩包文件可能包含了实现上述逻辑的Java代码示例,对于初学者来说,通过阅读和理解这些代码,可以深入学习Java多线程编程和并发控制,进一步掌握生产者消费者模式的实现。

Global site tag (gtag.js) - Google Analytics