`
dsxwjhf
  • 浏览: 73029 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

生产者消费者之 LinkedBlockingQueue

 
阅读更多
package com.wjxie.linked.blocking.queue;

public class Producer extends Thread {

    public Producer(String name) {
        super(name);
    }

    @Override
    public void run() {
        while (true) {
            System.out.println("Producer queue size: " + Main.queue.size());
            try {
                Item item = new Item();
                Main.queue.put(item);
                System.out.println(this.getName() + " produce " + item);

                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}



package com.wjxie.linked.blocking.queue;

public class Consumer extends Thread {

    public Consumer(String name) {
        super(name);
    }

    @Override
    public void run() {
        while (true) {
            System.out.println("Consumer queue size: " + Main.queue.size());
            try {
                Item item = Main.queue.take();
                System.out.println(this.getName() + " consume " + item);

                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}



package com.wjxie.linked.blocking.queue;

import java.util.concurrent.LinkedBlockingQueue;

public class Main {

    public static LinkedBlockingQueue<Item> queue = new LinkedBlockingQueue<Item>(100);

    public static void main(String[] args) {
        Thread p = new Producer("[P]");
        Thread p2 = new Producer("[P2]");
        Thread c = new Consumer("[C]");
        Thread c2 = new Consumer("[C2]");
        p.start();
        p2.start();
        c.start();
        c2.start();
    }

}



package com.wjxie.linked.blocking.queue;

public class Item {

    private int id;

    public Item() {
        id = ID.getID();
    }

    @Override
    public String toString() {
        return "Item[" + id + "]";
    }

    static class ID {

        private static int id = 0;

        public static int getID() {
            return ++id;
        }

    }

}

分享到:
评论

相关推荐

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

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

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

    创建一个简单的生产者消费者模型,可以使用以下伪代码: ```java class Producer implements Runnable { private final BlockingQueue&lt;String&gt; queue; public Producer(BlockingQueue&lt;String&gt; queue) { this....

    java生产者消费者问题

    Java生产者消费者问题是多线程编程中的一个经典问题,它主要涉及到线程间的协作与通信。在并发编程中,生产者负责生成数据,而消费者则负责处理这些数据。为了解决生产者和消费者之间的问题,Java提供了一系列的同步...

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

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

    生产者消费者

    在计算机科学中,"生产者消费者"模式是一种经典的多线程设计模式,它涉及到资源的共享和线程间的协作。这个模式通常用于处理并发问题,其中"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。在Java中,...

    生产者消费者java源码

    在Java编程中,"生产者消费者"模式是一种经典的多线程设计模式,它主要用于解决并发问题,特别是数据处理和资源管理。在这个模式中,生产者负责生成数据,而消费者则负责消耗这些数据。这种模式利用了Java的并发API...

    java生产者消费者

    Java生产者消费者模式是一种多线程设计模式,它在并发编程中被广泛使用,用于解决资源的共享问题。...了解并熟练掌握生产者消费者模式是每个Java开发人员必备的技能之一,它能够帮助我们编写出高效、稳定的并发程序。

    java 编写的生产者与消费者问题

    在计算机科学中,生产者-消费者问题是多线程并发控制中的一个经典问题。该问题描述了两个并发执行的进程——生产者和消费者,它们共享一个有限大小的缓冲区。生产者进程负责生成数据(消息)并放入缓冲区,而消费者...

    java实现生产者消费者

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

    producer-java.rar_java 生产者 消费者_java 生产者消费者_producer.java_生产者 消费者

    其中一个著名的多线程问题就是“生产者消费者问题”。该问题涉及两个角色:生产者(Producer)负责创建数据,而消费者(Consumer)负责消耗这些数据。在实际应用中,如数据库系统、消息队列等,生产者消费者模型有着...

    android 生产者消费者模式

    在Android开发中,生产者-消费者模式是一种常见的多线程设计模式,用于处理并发问题,尤其是在数据处理和异步操作中。这个模式的核心思想是通过一个共享的数据缓冲区,使得生产者线程可以生成数据并放入缓冲区,而...

    java生产者消费者模型

    Java生产者消费者模型是多线程编程中一种经典的并发控制模型,它源于操作系统中的哲学思想,用于解决资源的共享和异步处理问题。在该模型中,"生产者"线程负责生成数据,而"消费者"线程则负责消费这些数据。两者之间...

    Java线程间的通信----生产者消费者模型

    生产者消费者模型是一种经典的线程同步问题,它模拟了实际生活中的生产过程和消费过程,使得生产者线程可以将数据生产出来,而消费者线程则负责消耗这些数据,两者之间通过共享数据结构进行协同工作。 生产者消费者...

    生产者消费者模型的演变

    生产者消费者模型是一种多线程同步的经典设计模式,它源于操作系统中的进程通信概念,用于解决资源的高效利用和协同工作问题。在这个模型中,生产者线程负责生成数据,而消费者线程则负责消费这些数据。为了确保生产...

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

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

    线程同步--生产者消费者问题

    在Java编程中,"线程同步--生产者消费者问题"是一个经典的多线程问题,它涉及到如何有效地在多个线程之间共享资源。这个问题通常用于演示和理解线程间的协作机制,如互斥锁、条件变量等。在此,我们将深入探讨这个...

    生产者消费者算法

    生产者消费者算法是一种在多线程编程...同时,你还可以考虑优化生产者消费者的性能,例如通过使用不同的队列实现(如ArrayBlockingQueue、LinkedBlockingQueue等),以及调整队列大小和线程数量以适应不同场景的需求。

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

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

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

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

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

    标题和描述中的知识点聚焦于Java语言中通过模拟“生产者-消费者”问题来演示线程同步和阻塞机制。此问题通常用于理解并发编程中资源的共享与竞争,尤其是在多线程环境中。以下是对该主题的详细解析: ### 生产者-...

Global site tag (gtag.js) - Google Analytics