• 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张三丰

    微信交流群,添加群主微信,邀请入群
  • 相关阅读:
    python Json报错json.decoder.JSONDecodeError
    jupyter notebook改变行间图片大小
    SVM算法核函数的选择
    Linux中长时间运行程序的方法
    python通过多线程并获取返回值
    python多进程multiprocessing Pool相关问题
    pandas.read_sql_query()读取数据库数据用chunksize的坑
    Docker学习——Dockerfile
    Android之自定义ListView(一)
    Java编程思想——初始化与清理
  • 原文地址:https://www.cnblogs.com/skyme/p/2040798.html
Copyright © 2020-2023  润新知