`

Java中Queue和BlockingQueue的区别

阅读更多

1.BlockingQueue:支持两个附加操作的 Queue,这两个操作是:检索元素时等待队列变为非空,以及存储元素时等待空间变得可用。

  2.BlockingQueue 不接受 null 元素。

  3.BlockingQueue 可以是限定容量的。

  4.BlockingQueue 实现是线程安全的。Queue不是线程安全的。因此可以将Blockingqueue用于用于生产者-使用者队列。

  根据Api修改的一个例子,大家可以修改自己体验BlockingQueue的使用

  package test;

  import java.util.concurrent.ArrayBlockingQueue;

  import java.util.concurrent.BlockingQueue;

  /**

  * 生产者

  * @author wasw100

  */

  class Producer implements Runnable {

  private final BlockingQueue queue;

  Producer(BlockingQueue q) {

  queue = q;

  }

  public void run() {

  try {

  for (int i = 0; i < 3; i++) {

  queue.put(produce());

  System.out.println("生产后:"+queue.peek());

  }

  } catch (InterruptedException ex) {

  ex.printStackTrace();

  }

  }

  Character produce() {

  char c = (char) (Math.random() * 26 + 'A');

  System.out.println("生产前:" + c);

  return c;

  }

  }

  /**

  * 消费者

  * @author wasw100

  */

  class Consumer implements Runnable {

  private final BlockingQueue queue;

  Consumer(BlockingQueue q) {

  queue = q;

  }

  public void run() {

  try {

  while (true) {

  consume(queue.take());

  //Thread.sleep(100);

  }

  } catch (InterruptedException ex) {

  ex.printStackTrace();

  }

  }

  void consume(Character c) {

  System.out.println("消费:" + c);

  }

  }

  /**

  * 一个生产者、两个消费者

  *

  * @author wasw100

  */

  class Setup {

  public static void main(String[] args) {

  BlockingQueue q = new ArrayBlockingQueue(1);

  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();

  }

  }

 

分享到:
评论

相关推荐

    Java多线程Queue、BlockingQueue和使用BlockingQueue实现生产消费者模型方法解析

    主要介绍了Java多线程Queue、BlockingQueue和使用BlockingQueue实现生产消费者模型方法解析,涉及queue,BlockingQueue等有关内容,具有一定参考价值,需要的朋友可以参考。

    【Java】Queue、BlockingQueue和队列实现生产者消费者模式

    Queue接口 – 队列1.1 ConcurrentLinkedQueue类(线程安全)2. BlockingQueue接口 – 阻塞队列2.1 ArrayBlockingQueue类(有界阻塞队列)2.2 LinkedBlockingQueue类(无界阻塞队列)3. 源码:BlockingQueue实现生产...

    基于java中BlockingQueue的使用介绍

    本篇文章小编为大家介绍,基于java中BlockingQueue的使用介绍。需要的朋友参考下

    C++写的跨平台BlockingQueue

    类似java BlockingQueue,C++写的,支持Windows与Linux。

    Java并发编程--BlockingQueue.docx

    BlockingQueue支持两个附加操作的Queue:1)当Queue为空时,获取元素线程被阻塞直到Queue变为非空;2)当Queue满时,添加元素线程被阻塞直到Queue不满。BlockingQueue不允许元素为null,如果入队一个null元素,会抛...

    java并发学习之BlockingQueue实现生产者消费者详解

    主要介绍了java并发学习之BlockingQueue实现生产者消费者详解,具有一定参考价值,需要的朋友可以了解下。

    java线程并发blockingqueue类使用示例

    BlockingQueue是一种特殊的Queue,若BlockingQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态直到BlocingkQueue进了新货才会被唤醒,下面是用BlockingQueue来实现Producer和Consumer的例子

    BlockingQueue

    BlockingQueue java 的工具类,初次要用于消费者,生产者的同步问题。

    Java多线程工具篇BlockingQueue的详解

    今天小编就为大家分享一篇关于Java多线程工具篇BlockingQueue的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    Redisson-构建在Redis服务器之上的分布式可扩展Java数据结构

    分布式Java对象包括Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue等

    线程安全队列Queue

    在项目启动时,开一个单线程来专门处理巡检任务的下发给巡检服务组件。使用BlockingQueue阻塞算法。BlockingQueue作为线程容器,可以为线程同步提供有力的保障。

    Java多线程(五)之BlockingQueue深入分析

    绍Java多线程(五)之BlockingQueue深入分析

    disruptor:Disruptor BlockingQueue

    Conversant ConcurrentQueue、Disruptor BlockingQueue 和 ConcurrentStack Disruptor是Java中性能最高的线程内传输机制。 Conversant Disruptor 是这种环形缓冲区中性能最高的实现,因为它几乎没有开销,并且采用了...

    java并发包&线程池原理分析&锁的深度化

    并发包 同步容器类 Vector与ArrayList区别 1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。...列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。

    Java并发编程(学习笔记).xmind

    栅栏和闭锁的区别 所有线程必须同时到达栅栏位置,才能继续执行 闭锁用于等待事件,而栅栏用于等待线程 栅栏可以重用 形式 CyclicBarrier 可以让一定数量的参与线程反复地...

    Java容器.xmind

    Queue 标记: interface BlockingQueue 标记: interface ArrayBlockingQueue LinkedBlockingQueue ConcurrentLinkedQueue 标记: class Map 标记: 顶级接口 HashMap 标记: class V get​(Object key) V put​...

    java7hashmap源码-to-be-architect:成为Java架构师,你应该学习这些

    java7 hashmap源码 to-be-architect ...并发Queue:BlockingQueue Map:ConcurrentHashMap、HashMap、HashTable 并发List Set:CopyOnWriteArrayList、CopyOnWriteArraySet、 ArrayList、 LinkedList Concurrent

    JAVA高并发_学习笔记

    JAVA学习高并发的学习笔记。同步非阻塞式IO:Buffere Channel Selector Concurrent包:Blocking:Queue\Concurrent Hash Map \ExcutorService\lock\原子性 BlockingQueue:ArrayBlockingQueue , DelayQueue , ...

    java面试常见基础(深层次,高级研发)

    16. Hashmap和 concurrentHashmap除了线程安全 还有什么区别,put的时候是怎么处理的。 43 17. 数据库组合索引,储存在一个叶子节点还是多个? 44 17.1. 索引的利弊与如何判定,是否需要索引: 44 17.1.1. 索引的...

    java线程池概念.txt

     b:在实际使用中,服务器在创建和销毁线程上花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源。如果在一...

Global site tag (gtag.js) - Google Analytics