zoukankan      html  css  js  c++  java
  • java队列Queue实现

    模拟实现代码如下:

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Queue;
    import java.util.concurrent.LinkedBlockingQueue;
    
    /**
     * TODO
     * java队列Queue实现
     */
    public class QueueTest {
    
        private static final Queue<String> STRING_VO_QUEUE = new LinkedBlockingQueue<>();
    
        public void sendQueueTest(String str) {
            if (null == str || str.equals("")) {
                return;
            }
            STRING_VO_QUEUE.add(str);
        }
    
        public QueueTest() {
            new Thread() {
                @Override
                public void run() {
                    List<String> stringList = new ArrayList<>();
                    while (true) {
                        try {
                            String string = STRING_VO_QUEUE.poll();
                            if (null == string || string.equals("")) {
                                if (null == stringList || stringList.size() <= 0) {
                                    Thread.sleep(5000);
                                    continue;
                                }
                                for (String str : stringList) {
                                    System.out.println(str);
                                }
                                // 千万不能忘记清空以消费数据
                                stringList.clear();
                            }
                            if (null != string && !string.equals("")) {
                                stringList.add(string);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                            try {
                                Thread.sleep(10000);
                            } catch (InterruptedException e1) {
                                e1.printStackTrace();
                            }
                        }
                    }
                }
            }.start();
        }
    
        public static void main(String[] args) {
            QueueTest queueTest = new QueueTest();
            for (int i = 0; i < 10; i++) {
                queueTest.sendQueueTest("老弟,预备开始:" + i);
            }
        }
    }
    

    实现接口类别:

      * ArrayBlockingQueue :一个由数组支持的有界队列。
      * LinkedBlockingQueue :一个由链接节点支持的可选有界队列。
      * PriorityBlockingQueue :一个由优先级堆支持的无界优先级队列。
      * DelayQueue :一个由优先级堆支持的、基于时间的调度队列。
      * SynchronousQueue :一个利用 BlockingQueue 接口的简单聚集(rendezvous)机制。

    可调用方法及注意事项:

      add        增加一个元索                     如果队列已满,则抛出一个IIIegaISlabEepeplian异常
      remove   移除并返回队列头部的元素    如果队列为空,则抛出一个NoSuchElementException异常
      element  返回队列头部的元素             如果队列为空,则抛出一个NoSuchElementException异常
      offer       添加一个元素并返回true       如果队列已满,则返回false
      poll         移除并返问队列头部的元素    如果队列为空,则返回null
      peek       返回队列头部的元素             如果队列为空,则返回null
      put         添加一个元素                      如果队列满,则阻塞
      take        移除并返回队列头部的元素     如果队列为空,则阻塞

    详细介绍参考资料:

      https://www.cnblogs.com/lemon-flm/p/7877898.html

  • 相关阅读:
    tp5 引入 没有命名空间的类库的方法(以微信支付SDK为例)
    VMware虚拟机安装黑苹果MacOS Mojave系统详细教程
    本文实例讲述了PHP7基于curl实现的上传图片功能-formdata格式上传图片
    宝板面板无法安装,宝塔无法更新安装插件,比如无法安装ftp插件,通过更换hosts指向就可以了
    destoon GBK版本dhtmlspecialchars函数 bug
    有以下40个迹象表明你还是PHP菜鸟
    对高访问量与庞大数据处理的网站系统结构分析
    加入收藏与设为首页JS兼容简易效果
    html让没有宽高限制的图片居中
    PHP识别url重写请求
  • 原文地址:https://www.cnblogs.com/Big-Boss/p/12157152.html
Copyright © 2011-2022 走看看