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

java中自动实现生产者消费者模式的队列

 
阅读更多

/**

    本例介绍一个特殊的队列:BlockingQueue,如果BlockQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状 态,直到BlockingQueue进了东西才会被唤醒.同样,如果BlockingQueue是满的,任何试图往里存东西的操作也会被阻断进入等待状 态,直到BlockingQueue里有空间才会被唤醒继续操作.

    本例再次实现11.4线程----条件Condition中介绍的篮子程序,不过这个篮子中最多能放的苹果数不是1,可以随意指定.当篮子满时,生产者进入等待状态,当篮子空时,消费者等待.

 */

/**

    使用BlockingQueue的关键技术点如下:

    1.BlockingQueue定义的常用方法如下:

        1)add(anObject):把anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则招聘异常

        2)offer(anObject):表示如果可能的话,将anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则返回false.

        3)put(anObject):把anObject加到BlockingQueue里,如果BlockQueue没有空间,则调用此方法的线程被阻断直到BlockingQueue里面有空间再继续.

        4)poll(time):取走BlockingQueue里排在首位的对象,若不能立即取出,则可以等time参数规定的时间,取不到时返回null

        5)take():取走BlockingQueue里排在首位的对象,若BlockingQueue为空,阻断进入等待状态直到Blocking有新的对象被加入为止

    2.BlockingQueue有四个具体的实现类,根据不同需求,选择不同的实现类

        1)ArrayBlockingQueue:规定大小的BlockingQueue,其构造函数必须带一个int参数来指明其大小.其所含的对象是以FIFO(先入先出)顺序排序的.

        2)LinkedBlockingQueue:大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的 BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定.其所含 的对象是以FIFO(先入先出)顺序排序的

        3)PriorityBlockingQueue:类似于LinkedBlockQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数的Comparator决定的顺序.

        4)SynchronousQueue:特殊的BlockingQueue,对其的操作必须是放和取交替完成的.

    3.LinkedBlockingQueue和ArrayBlockingQueue比较起来,它们背后所用的数据结构不一样,导致 LinkedBlockingQueue的数据吞吐量要大于ArrayBlockingQueue,但在线程数量很大时其性能的可预见性低于 ArrayBlockingQueue.         

 */

0
0
分享到:
评论

相关推荐

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

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

    阻塞队列实现生产者消费者模式Java开发Java经验技巧共

    在Java开发中,生产者消费者模式是一种常见的多线程设计模式,它允许生产者线程创建数据并放入队列,而消费者线程则从队列中取出并处理这些数据,两者之间无需直接交互,有效解耦了系统组件。在这个场景中,阻塞队列...

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

    在Java中,我们可以通过`java.util.concurrent`包中的`BlockingQueue`来实现生产者消费者模式。`BlockingQueue`是一个线程安全的数据结构,它提供了一种在生产者和消费者之间同步的方法,当队列满时,生产者会被阻塞...

    生产者消费者模式在java中的应用

    在Java中实现生产者消费者模式,主要依赖于Java提供的并发工具类,如`BlockingQueue`接口以及其实现类,如`ArrayBlockingQueue`、`LinkedBlockingQueue`等。这些队列具有线程安全的特性,能够有效地避免数据竞争和...

    消息分发框架(基于JAVA阻塞队列实现、 生产者消费者模型)

    综上所述,"消息分发框架(基于JAVA阻塞队列实现、生产者消费者模型)"是一个关键的并发处理组件,通过Java提供的并发工具和设计模式,实现了高效、稳定的消息处理。在实际应用中,需要根据业务需求进行适当的性能...

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

    在Java中,我们可以使用`java.util.concurrent`包中的工具类来实现生产者和消费者模式。主要涉及到的类有`BlockingQueue`(阻塞队列)和`Thread`(线程)。阻塞队列是一种特殊的队列,当队列为空时,尝试获取元素的...

    java生产者消费者模型

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

    生产者消费者java源码

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

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

    Java多线程中的生产者-消费者模式是一种典型的同步与协作模型,它用于解决在多线程环境下资源的有效利用和协调问题。在这个模式中,通常有两个角色:生产者和消费者。生产者负责创建产品,而消费者则负责消费这些...

    Java实现的线程池、消息队列功能

    5. 负载均衡:多消费者可以从队列中获取任务,实现任务的负载均衡。 在实际应用中,根据业务需求,我们可以自定义线程池配置,如设置合适的线程数量和队列大小,以优化系统的资源利用率和性能。同时,消息队列的...

    JAVA_生产者-消费者

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

    JAVA中的生产者与消费者

    在Java中,我们可以使用`java.util.concurrent`包中的工具类来实现生产者消费者模型,如`BlockingQueue`。`BlockingQueue`是一个接口,它提供了线程安全的队列操作,能够自动处理阻塞和唤醒线程,非常适合于解决这个...

    java_生产者消费者

    在Java中实现生产者消费者模式,通常会用到以下核心组件: 1. **共享资源**:通常是某种数据结构,如`ArrayBlockingQueue`或`LinkedList`,用于存储待消费的数据。在这个案例中,描述中提到的"队list集合"就是这个...

    生产者消费者

    在Java中,`BlockingQueue`接口是实现生产者消费者模式的理想选择。`BlockingQueue`提供了线程安全的队列操作,并且内置了阻塞机制。当队列满时,`put()`方法会使得生产者线程自动阻塞,直至队列有空位;当队列空时...

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

    在Java中,我们可以使用`java.util.concurrent`包下的`BlockingQueue`接口来实现生产者消费者模式。`BlockingQueue`提供了线程安全的队列操作,如添加(put)和移除(take),当队列满时,添加操作会阻塞生产者线程...

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

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

    生产者消费者java

    在给定的文件中,`consumer.java`和`Testconsumer.java`可能是实现生产者消费者模式的源代码。通常,`consumer.java`会包含消费者的类定义,而`Testconsumer.java`可能是测试类,用于启动并验证生产者消费者模型的...

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

    生产者消费者模式是一种多线程设计模式,它用于解决生产数据和消费数据的同步问题,以避免生产者过快生产导致资源浪费,或者消费者过快消费导致无数据可处理的情况。这种模式通常由两个主要角色构成:生产者...

    java 生产者与消费者

    此外,`CountDownLatch`和`CyclicBarrier`等同步工具类也可以在生产者消费者模式中起到协调线程的作用。`CountDownLatch`允许一个或多个线程等待其他线程完成操作,而`CyclicBarrier`允许一组线程等待其他线程到达一...

    java生产者消费者问题

    7. **扩展应用**:生产者消费者模式不仅仅局限于单一的生产者和消费者,还可以有多生产者或多消费者的情况,只要确保它们都遵循同样的规则,即在适当的时候对缓冲区进行操作。 8. **其他同步工具**:除了`...

Global site tag (gtag.js) - Google Analytics