`
381573578
  • 浏览: 72199 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

ArrayBlockingQueue

    博客分类:
  • java
阅读更多

import java.util.concurrent.ArrayBlockingQueue;

public class Producer implements Runnable {
    
    private ArrayBlockingQueue<String> queue;
    private String producerName;
    
    public Producer(String producerName, ArrayBlockingQueue<String> queue) {
        this.queue = queue;        
        this.producerName = producerName;
    }

    @Override
    public void run() {
        while(true){
            try {
                this.queue.put("Produced by " + this.producerName);
                System.out.println("Number of products in the queue after production: " + this.queue.size());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

import java.util.concurrent.ArrayBlockingQueue;

public class Consumer implements Runnable {
    
    private ArrayBlockingQueue<String> queue;
    
    public Consumer(ArrayBlockingQueue<String> queue) {
        this.queue = queue;            
    }

    @Override
    public void run() {
        while(true){
            try {
                this.queue.take();
                System.out.println("Number of products in the queue after consumption: " + this.queue.size());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

import java.util.concurrent.ArrayBlockingQueue;

public class ProducerConsumerTest {

    public static void main(String[] args) {
        
        ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(10);
        
        Producer producer1 = new Producer("producer1", queue);
        Producer producer2 = new Producer("producer2", queue);
        Producer producer3 = new Producer("producer2", queue);
        
        Consumer consumer1 = new Consumer(queue);
        Consumer consumer2 = new Consumer(queue);
        Consumer consumer3 = new Consumer(queue);
        
        new Thread(producer1).start();
        new Thread(producer2).start();
        new Thread(producer3).start();
        new Thread(consumer1).start();
        new Thread(consumer2).start();
        new Thread(consumer3).start();            
    }
}

 

 

分享到:
评论

相关推荐

    ArrayBlockingQueue源码分析.docx

    `ArrayBlockingQueue` 是 Java 中实现并发编程时常用的一个线程安全的数据结构,它是一个有界的阻塞队列。在 `java.util.concurrent` 包下,`ArrayBlockingQueue` 继承自 `java.util.concurrent.BlockingQueue` 接口...

    ArrayBlockingQueue源码解析-动力节点共

    ArrayBlockingQueue是Java并发编程中一个重要的数据结构,它是Java并发包`java.util.concurrent`中的一个线程安全的阻塞队列。这个队列基于数组实现,提供了在生产者和消费者之间进行数据交换的能力,同时确保了线程...

    并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解

    "并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解" ArrayBlockingQueue和LinkedBlockingQueue是Java并发容器中两个常用的阻塞队列实现,分别基于数组和链表存储元素。它们都继承自AbstractQueue类...

    26不让我进门,我就在门口一直等!—BlockingQueue和ArrayBlockingQueue.pdf

    —BlockingQueue和ArrayBlockingQueue.pdf” 【描述】:此文档是关于Java并发编程的学习资料,以漫画形式讲解,聚焦于Java并发编程中的核心概念——BlockingQueue接口及其具体实现ArrayBlockingQueue。 【标签】:...

    详细分析Java并发集合ArrayBlockingQueue的用法

    Java并发集合ArrayBlockingQueue的用法详解 Java并发集合ArrayBlockingQueue是Java并发集合框架下的一个重要组件,它提供了阻塞队列的实现,用于多线程环境下的并发操作。下面是对ArrayBlockingQueue的用法详解: ...

    java并发之ArrayBlockingQueue详细介绍

    Java并发之ArrayBlockingQueue详细介绍 ArrayBlockingQueue是Java并发编程中常用的线程安全队列,经常被用作任务队列在线程池中。它是基于数组实现的循环队列,具有线程安全的实现。 ArrayBlockingQueue的实现 ...

    Java源码解析阻塞队列ArrayBlockingQueue常用方法

    Java中的ArrayBlockingQueue是一个高效的并发数据结构,它是Java并发包`java.util.concurrent`下的一个阻塞队列。本文将深入解析ArrayBlockingQueue的常用方法及其内部实现机制。 ArrayBlockingQueue的核心是一个...

    Java concurrency集合之ArrayBlockingQueue_动力节点Java学院整理

    ArrayBlockingQueue是Java并发编程中一个重要的集合类,它属于 BlockingQueue 接口的一个实现,主要特点是线程安全、有界以及基于数组的阻塞队列。线程安全得益于其内部使用了Java并发包中的ReentrantLock(可重入锁...

    java中LinkedBlockingQueue与ArrayBlockingQueue的异同

    Java中的`LinkedBlockingQueue`和`ArrayBlockingQueue`都是`java.util.concurrent`包下的线程安全队列,它们都实现了`BlockingQueue`接口,提供了一种高效、线程安全的数据同步方式。这两种队列在很多方面都有相似之...

    Java源码解析阻塞队列ArrayBlockingQueue介绍

    Java源码解析阻塞队列ArrayBlockingQueue介绍 Java源码解析阻塞队列ArrayBlockingQueue介绍是Java中的一种阻塞队列实现,使用ReentrantLock和Condition来实现同步和阻塞机制。本文将对ArrayBlockingQueue的源码进行...

    Java源码解析阻塞队列ArrayBlockingQueue功能简介

    Java源码解析阻塞队列ArrayBlockingQueue功能简介 ArrayBlockingQueue是Java中一个重要的阻塞队列实现,它基于数组实现了有界阻塞队列,提供FIFO(First-In-First-Out)功能。该队列的头元素是最长时间呆在队列中的...

    Java可阻塞队列-ArrayBlockingQueue

    在前面的的文章,写了一个带有缓冲区的队列,是用JAVA的Lock下的Condition实现的,但是JAVA类中提供了这项功能,是ArrayBlockingQueue,  ArrayBlockingQueue是由数组支持的有界阻塞队列,次队列按照FIFO(先进先...

    spring-blockingqueue:用Spring Boot阻止队列

    通常,我们会选择实现BlockingQueue的类,如ArrayBlockingQueue、LinkedBlockingQueue或PriorityBlockingQueue,根据实际需求选择合适的实现。 例如,我们可以创建一个配置类,如下所示: ```java @Configuration ...

    阻塞队列阻塞队列阻塞队列

    ArrayBlockingQueue支持公平和非公平两种策略,公平策略意味着等待最久的线程优先获得资源,而非公平策略则不保证这一点。在高并发场景下,非公平策略通常能提供更好的性能。 2. LinkedBlockingQueue ...

    生产者消费者问题java

    ArrayBlockingQueue&lt;Integer&gt; queue = new ArrayBlockingQueue(10); Thread producer = new Thread(new Producer(queue)); Thread consumer = new Thread(new Consumer(queue)); producer.start(); consumer....

    JAVA并发编程深度学习-无锁并行计算框架1

    本节我们将深入探讨Disruptor框架以及与ArrayBlockingQueue的对比。 ArrayBlockingQueue是Java并发库中的一个阻塞队列实现,基于循环数组,提供了线程安全的入队和出队操作。在上述代码中,我们创建了一个固定大小...

Global site tag (gtag.js) - Google Analytics