zoukankan      html  css  js  c++  java
  • Queue 非阻塞队列

    非阻塞队列

     1 package com.test;
     2 
     3 import java.util.LinkedList;
     4 import java.util.PriorityQueue;
     5 import java.util.Queue;
     6 import java.util.concurrent.ConcurrentLinkedQueue;
     7 
     8 public class LearnQueue {
     9     public static void main(String[] args) {
    10         //LinkedList 实现了双向队列 Deque,LinkedList允许添加null元素
    11         Queue<String> queue = new LinkedList<>();
    12         queue.add("x");
    13         queue.add(null);
    14         queue.offer(null);
    15         for (String s : queue) {
    16             System.out.println(s);
    17         }
    18 
    19         //Priority 可以指定初始容量,扩容方式是size<64的话,双倍扩容,>64的话1.5倍扩容
    20         //Priority  构造方法可以指定自定义的比较器Comparator,不指定使用元素自己的排序。
    21         //队列中的元素并不一定是有序的,但是队列的第一个元素肯定是优先级最高的。
    22         // 造成这种情况的原因是:PriorityQueue是使用最小堆实现的优先队列的存储。参考:https://blog.csdn.net/u010853261/article/details/78520960
    23         // 插入元素时,新增元素会与他的父节点比较,如果小于父节点则与父节点交换值,直到找到最适合他的位置。
    24         // 删除元素时,从0节点开始找左右最小的子节点来替换父节点,直到当前节点大于size/2
    25         Queue<String> priorityQueue = new PriorityQueue<>(2);
    26         priorityQueue.add("yello");
    27         priorityQueue.add("zoo");
    28         priorityQueue.offer("aaaa");
    29         //此时队列中的值为 aaaa zoo yello  (zoo 与 yello 顺序错误)
    30         priorityQueue.poll();
    31         //此时队列中的值为 yello zoo
    32         for (String s : priorityQueue) {
    33             //结果为 axzzy
    34             System.out.println(s);
    35         }
    36 
    37         // ConcurrentLinkedQueue 实现线程安全的方式是,
    38         // tail 跟head 节点是volatile修饰的,保证了可见性
    39         // 在修改队列时,调用了 UNSAFE.compareAndSwapObject() 保证了该操作的原子性
    40         // 关于CAS的解释:https://juejin.im/post/5a73cbbff265da4e807783f5
    41         Queue<String> concurrentLinkedQueue = new ConcurrentLinkedQueue<>();
    42         concurrentLinkedQueue.add("xxx");
    43     }
    44 }
  • 相关阅读:
    Redis
    Redis
    Redis
    Redis
    Redis
    Redis
    Distributed
    Sentinel
    Archi
    Redis
  • 原文地址:https://www.cnblogs.com/han6/p/11243500.html
Copyright © 2011-2022 走看看