• 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

  • 相关阅读:
    阿里的蚂蚁雄兵,已经俨然一个帝国
    Redmine数据库备份及搬家
    Redmine插件及使用
    高效代码审查的十个经验
    Redmine管理项目3-调整用户显示格式
    Redmine管理项目2-邮件通知
    Redmine管理项目1-自定义属性
    Excel VLOOKUP函数的使用方法
    一键安装Redmine
    Jdon框架开发指南
  • 原文地址:https://www.cnblogs.com/Big-Boss/p/12157152.html
Copyright © 2020-2023  润新知