专栏首页cloudskymeJava中Queue和BlockingQueue的区别

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 跟我一起云计算(3)——hbase

    hbase HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存...

    cloudskyme
  • 跟我一起云计算(1)——storm

    概述 最近要做一个实时分析的项目,所以需要深入一下storm。 为什么storm 综合下来,有以下几点: 1. 生逢其时 MapReduce 计算模型打开了分布...

    cloudskyme
  • 使用oracle的大数据工具ODCH访问HDFS数据文件

    软件下载 Oracle Big Data Connectors:ODCH 下载地址: http://www.oracle.com/technetwork/bdc...

    cloudskyme
  • ISLR_ANOVA

    概述 核心思想 检定统计量F 结论 适用情况 Multi comparison ANOVA不同于之前的z检定,t检定,这里的零假设包含了很多个变量,具体是μ1=...

    用户1147754
  • “中央处理器”三字母域名CPU.com超86.6万元被拍

    CUP一个现如今好不陌生的词,它是电脑的主要零部件,而电脑现已成为人们工作、生活不可或缺的办公用品。可想而知,域名cpu.com的价值有多高。

    躲在树上的域小名
  • 工作了十年的高级Java程序员分享从业经验(送给还在奋斗的码农)

    美的让人心动
  • web前端网站收藏

    用户2930719
  • 计算机网络原理梳理丨TCP/IP 协议族内含网络协议汇总及工作原理

    Domain Name System,域名解析系统,将域名解析为IP地址,DNS的默认缺省端口号为53

    码脑
  • JAVA非对称加密算法-RSA算法

    用户1444933
  • SpringBoot入门

    Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品。无需开发重量级的 Enterp...

    一点博客

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动