zoukankan      html  css  js  c++  java
  • 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();

      }

      }

    作者:张锋
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
    更多精彩文章可以观注
    微信公众号 soft张三丰

    微信交流群,添加群主微信,邀请入群
  • 相关阅读:
    [POI2004] SZP (贪心+拓扑排序)
    【洛谷 P1525】 关押罪犯 (二分图+二分答案)
    【洛谷 P1073】 最优贸易 (Tarjan缩点+拓扑排序)
    【洛谷 P4320】 道路相遇 (圆方树,LCA)
    【CF1009F】 Dominant Indices (长链剖分+DP)
    【洛谷 P1707】 刷题比赛 (矩阵加速)
    【洛谷 P4568】 [JLOI2011]飞行路线 (分层最短路)
    【洛谷 P1129】 [ZJOI2007]矩阵游戏 (二分图匹配)
    【CF558E】 A Simple Task (权值线段树)
    【洛谷 P2303】 [SDOi2012]Longge的问题 (欧拉函数)
  • 原文地址:https://www.cnblogs.com/skyme/p/2040798.html
Copyright © 2011-2022 走看看