`
tianyalinfeng
  • 浏览: 442490 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

BlockingQueue & LinkedBlockingQueue

    博客分类:
  • Java
 
阅读更多

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

class Producer implements Runnable {
 private final BlockingQueue queue;
 private int size=0;

 Producer(BlockingQueue q) {
  queue = q;
 }

 public void run() {
  try {
   while (true&&size++<=10) {
    queue.put(produce());
   }
  } catch (InterruptedException ex) {
   // ... handle ...
  }
 }

 Object produce() {
  System.out.println("produce...");
  return "something";
 }
}

class Consumer implements Runnable {
 private final BlockingQueue queue;

 Consumer(BlockingQueue q) {
  queue = q;
 }

 public void run() {
  try {
   while (true&&!queue.isEmpty()) {
    consume(queue.take());
   }
  } catch (InterruptedException ex) {
   // ... handle ...
  }
 }

 void consume(Object x) {
  System.out.println("consume...");
 }
}

class Setup {
 public static void main(String[] args) {
  BlockingQueue q = new LinkedBlockingQueue();
  Producer p = new Producer(q);
  Consumer c1 = new Consumer(q);
  Consumer c2 = new Consumer(q);
  new Thread(p).start();
  new Thread(c1).start();
  new Thread(c2).start();
 }
}

分享到:
评论

相关推荐

    spring-blockingqueue:用Spring Boot阻止队列

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

    线程----BlockingQueue

    - **LinkedBlockingQueue**: 默认情况下是一个无限大小的`BlockingQueue`,如果在构造时指定了大小,则变为有限大小。队列中的元素也遵循FIFO原则排序。 - **PriorityBlockingQueue**: 一种可以按照元素的优先级排序...

    linkedblockingqueue

    《LinkedBlockingQueue深度解析与应用实践》 在Java并发编程领域,`LinkedBlockingQueue`是一个不可或缺的工具。作为`java.util.concurrent`包中的一个线程安全的队列,它基于链表结构实现,具备先进先出(FIFO)的...

    LinkedBlockingQueue 和 ConcurrentLinkedQueue的区别.docx

    LinkedBlockingQueue实现了BlockingQueue接口,其阻塞特性使得当队列满时,插入操作会阻塞,队列空时,取出操作也会阻塞。这种机制确保了线程间的同步,但也引入了锁竞争,可能导致性能下降,尤其是在多生产者和多...

    BlockingQueue队列自定义超时时间取消线程池任务

    常用实现如`ArrayBlockingQueue`、`LinkedBlockingQueue`等。 接下来,我们创建一个`newFixedThreadPool`线程池,这个线程池会维护固定数量的工作线程。它接收的任务会被放入工作队列,等待线程处理。通过设定...

    LinkedBlockingQueue + 单向链表基本结构

    该队列的主要特点是其内部数据结构采用了一个单向链表,并且实现了 BlockingQueue 接口,提供了线程安全的插入、删除和获取元素的操作。 单向链表是一种简单的数据结构,由一系列节点组成,每个节点包含数据以及...

    BlockingQueue的使用

    BlockingQueue还提供了一组容量有限的实现类,如`ArrayBlockingQueue`、`LinkedBlockingQueue`和`PriorityBlockingQueue`等。这些实现类的内部结构和性能特性有所不同,开发者可以根据实际需求选择合适的实现。 - `...

    简单实现BlockingQueue,BlockingQueue源码详解

    在Java中,有几个实现了BlockingQueue接口的类,如ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue等,它们各有特点: 1. **ArrayBlockingQueue**:基于数组的有界阻塞队列,容量固定,插入和删除...

    并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法

    `LinkedBlockingQueue` 同样是 `java.util.concurrent` 包下的一个线程安全的阻塞队列实现,它继承自 `AbstractQueue` 并实现了 `BlockingQueue` 接口。`LinkedBlockingQueue` 的特点是可以在队列满时阻塞生产者线程...

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

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

    java中线程队列BlockingQueue的用法

    `BlockingQueue`通常有固定大小的容量,如`ArrayBlockingQueue`,或者无界容量,如`LinkedBlockingQueue`。这使得在并发环境下,线程可以控制资源的消费速度,防止过度消耗。 4. **公平性与非公平性** - `...

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

    它们都继承自AbstractQueue类,并实现了BlockingQueue接口,提供了线程安全的队列操作。 ArrayBlockingQueue实现原理: ArrayBlockingQueue内部使用数组存储元素,使用ReentrantLock来保证线程安全,使用Condition...

    并发容器——BlockingQueue相关类

    在Java编程中,`BlockingQueue`是一个非常重要的并发容器,它是Java并发包`java.util.concurrent`中的核心组件。`BlockingQueue`实现了一种线程安全的数据结构,它能够有效地协调生产者和消费者的动作,实现高效的...

    14-阻塞队列BlockingQueue实战及其原理分析二.pdf

    2. LinkedBlockingQueue:使用链表作为底层数据结构的阻塞队列。 3. SynchronousQueue:一个不存储元素的阻塞队列,生产者和消费者需要同时存在。 4. PriorityBlockingQueue:一个带有优先级的阻塞队列,元素的...

    Java并发编程--BlockingQueue.docx

    【Java并发编程--BlockingQueue详解】 BlockingQueue 是 Java 并发包(java.util.concurrent)中的一个接口,它扩展了 Queue 接口,并引入了线程安全的特性,特别适合于多线程环境下的数据共享。 BlockingQueue 的...

    JDK容器学习之Queue:LinkedBlockingQueue

    在Java的并发编程中,JDK提供的容器类库扮演了重要角色,其中`java.util.concurrent`包下的`BlockingQueue`接口及其实现类是多线程环境下数据同步的重要工具。本篇文章将深入探讨`LinkedBlockingQueue`,这是一个...

    2011.08.30(2)——— java BlockingQueue ExecutorService

    BlockingQueue的一些常见实现包括ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue等,每种实现都有其特定的性能特性和使用场景。例如,ArrayBlockingQueue是基于数组的,提供了固定容量,而...

    基于java中BlockingQueue的使用介绍

    Java并发包 `java.util.concurrent` 中提供了一些实现 BlockingQueue 的类,如 `ArrayBlockingQueue`、`LinkedBlockingQueue` 和 `PriorityBlockingQueue` 等。这些类各有特点,适用于不同的场景: - `...

    Java 多线程与并发(16-26)-JUC集合- BlockingQueue详解.pdf

    Java中的`BlockingQueue`接口是Java并发编程的重要组件,它位于`...在使用时,选择合适的实现类,如`ArrayBlockingQueue`, `LinkedBlockingQueue`, `LinkedBlockingDeque`等,可以根据具体需求来优化性能和内存使用。

    java线程并发blockingqueue类使用示例

    2. `LinkedBlockingQueue`:基于链表的实现,大小可变,默认无界,吞吐量通常高于`ArrayBlockingQueue`,但在高线程压力下可能更难预测性能。 3. `PriorityBlockingQueue`:优先级队列,元素按照自然顺序或自定义...

Global site tag (gtag.js) - Google Analytics