`
lucky_xingxing
  • 浏览: 119022 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java多线程消费者生产者模式(BlockingQueue 通过阻塞队列实现)

    博客分类:
  • java
阅读更多

import java.util.concurrent.BlockingQueue;

import java.util.concurrent.LinkedBlockingQueue;

 

/**

 * Created with IntelliJ IDEA.

 * User: csx

 * Date: 4/24/14

 * Time: 9:56 AM

 * To change this template use File | Settings | File Templates.

 *

 * 生产者与消费者模型中,要保证以下几点:

 * 1 同一时间内只能有一个生产者生产

 * 2 同一时间内只能有一个消费者消费

 * 3 生产者生产的同时消费者不能消费

 * 4 消费者消费的同时生产者不能生产

 * 5 共享空间空时消费者不能继续消费

 * 6 共享空间满时生产者不能继续生产

 *

 * 使用并发库中的BlockingQueue(阻塞队列) 实现生产者与消费者

 */

public class WaitNoticeDemo {

    public static void main(String[] args) {

        //固定容器大小为10

        BlockingQueue<Food> foods = new LinkedBlockingQueue<Food>(10);

        Thread produce = new Thread(new Produce(foods));

        Thread consume = new Thread(new Consume(foods));

        produce.start();

        consume.start();

    }

}

 

/**

 * 生产者

 */

class Produce implements Runnable{

    private BlockingQueue<Food> foods;

    Produce(BlockingQueue<Food> foods) {

        this.foods = foods;

    }

 

    @Override

    public void run() {

        int i = 0;

        while (true){

            try {

                //当生产的食品数量装满了容器,那么在while里面该食品容器(阻塞队列)会自动阻塞  wait状态 等待消费

                foods.put(new Food("食品"+i));

                i++;

            } catch (InterruptedException e) {

                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.

            }

        }

    }

}

 

/**

 * 消费者

 */

class Consume implements Runnable {

    private BlockingQueue<Food> foods;

    Consume(BlockingQueue<Food> foods){

        this.foods = foods;

    }

    @Override

    public void run() {

        try {

            Thread.sleep(1000);  //用于测试当生产者生产满10个食品后是否进入等待状态

            while (true){

                //当容器里面的食品数量为空时,那么在while里面该食品容器(阻塞队列)会自动阻塞  wait状态 等待生产

                Food food = foods.take();

                System.out.println("消费"+food.getName());

            }

        } catch (InterruptedException e) {

            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.

        }

    }

}

 

/**

 * 食品

 */

class Food{

    private String name;

 

    String getName() {

        return name;

    }

 

    Food(String name){

        this.name = name;

        System.out.println("生产"+name);

    }

}

 

如有不足 还请大家留言纠正修改。

0
0
分享到:
评论

相关推荐

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

    总之,Java中的生产者-消费者模式是多线程编程中解决数据共享和同步问题的有效手段,通过合理利用`BlockingQueue`等并发工具类,我们可以构建高效、稳定的多线程应用。在开发过程中,了解和掌握这种模式有助于提高...

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

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

    JAVA实现线程间同步与互斥生产者消费者问题

    4. **BlockingQueue阻塞队列**:Java的`java.util.concurrent`包提供了`BlockingQueue`接口,它是一种特殊的队列,可以在队列满时阻塞生产者,队列空时阻塞消费者,从而自动实现线程的同步和互斥。`put()`和`take()`...

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

    4. **阻塞队列(BlockingQueue)**:Java并发包(java.util.concurrent)中的阻塞队列是实现生产者消费者模式的理想选择。它们在内部已经处理了线程同步和等待,提供了一种高效且安全的共享数据方式。例如,`put()`...

    Java多线程 BlockingQueue实现生产者消费者模型详解

    Java多线程BlockingQueue实现生产者消费者模型详解 Java多线程中,生产者消费者模型是非常重要的一种设计模式,它可以解决多线程之间的数据传输问题。在Java中,我们可以使用BlockingQueue来实现生产者消费者模型,...

    java多线程实现生产者消费者关系

    BlockingQueue提供了一种线程安全的队列,它内置了同步机制,使得生产者在队列满时会被阻塞,消费者在队列空时也会被阻塞,直到条件满足后才能继续执行。 以下是一个简单的基于synchronized关键字和wait/notify机制...

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

    生产者和消费者模式是多线程编程中一个...通过这个模式,我们可以有效地协调生产者和消费者之间的关系,实现数据的高效传输,同时避免了多线程环境下的数据竞争问题。这个模式在并发编程和分布式系统中有着广泛的应用。

    生产者/消费者模式 阻塞队列 LinkedBlockingQueue

    在Java中,阻塞队列(BlockingQueue)是一个很好的实现生产者/消费者模式的工具,而LinkedBlockingQueue则是Java并发包(java.util.concurrent)中提供的一个具体实现。 LinkedBlockingQueue是一个基于链表结构的...

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

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

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

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

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

    在Java编程中,多线程是并发处理任务的关键机制,而生产者-消费者问题是多线程编程中的一个经典模型。这个模型描述了两个角色:生产者(Producer)负责创建资源,消费者(Consumer)则负责消耗这些资源。为了解决...

    BlockingQueue(阻塞队列)详解

    它提供了一种线程安全的方式来存储和检索对象,特别适用于生产者-消费者模式等场景。 #### 二、认识BlockingQueue **1. 阻塞队列概念** - **定义**:阻塞队列是一种特殊的队列,除了具有队列的基本特性外,还...

    java实现生产者消费者

    在Java编程中,"生产者消费者"模式是一种典型的多线程问题解决模型,它通过共享资源来协调生产者和消费者之间的操作。这个模式的核心在于如何有效地管理资源的生产和消费,以避免生产过快导致资源浪费,或者消费者...

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

    在本示例中,“java多线程例子-生产者消费者”旨在展示如何利用多线程来实现生产者和消费者模式。这种模式是并发编程中的经典设计模式,用于协调生产数据和消费数据的两个不同线程。 生产者消费者模式的基本概念是...

    java线程实现的生产者和消费者的程序

    Java线程实现的生产者和消费者程序是一种经典的多线程设计模式,用于处理并发操作中的数据共享问题。这种模式在实际编程中广泛应用,特别是在需要高效处理数据流和资源管理的系统中。以下将详细讲解其核心概念、实现...

    Java多线程设计模式_清晰完整PDF版 Java多线程设计模式源代码

    1. 生产者消费者模式:通过阻塞队列实现生产者线程和消费者线程之间的数据交换,确保生产速度与消费速度的平衡,避免资源浪费。Java中的BlockingQueue接口和相关实现类如ArrayBlockingQueue、LinkedBlockingQueue等...

    由生产者/消费者问题看JAVA多线程

    ### 由生产者/消费者问题深入理解JAVA多线程 #### 生产者/消费者问题概述 生产者/消费者问题是一个经典的计算机科学问题,用于展示进程间的通信与同步问题。在这个模型中,生产者负责创建数据并将其放置到共享内存...

    java模拟阻塞队列

    通过这种方式,我们可以更好地理解和应用Java中的阻塞队列,从而在多线程环境中实现更高效、更稳定的并发处理。在实际项目中,阻塞队列常用于消息队列、线程池的工作队列等场景,是并发编程的重要工具。

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

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

Global site tag (gtag.js) - Google Analytics