ConcurrentLinkedQueue

线程安全、可高效读写的队列,高并发下性能最好的队列。底层采用链表。

无锁、才用了CAS比较交换算法,修改的方法包含三个核心参数(V,E,N)

V:要更新的值;E:预期值;N:新值。

只有当V==E时,V=N。否则表示已经被更新过,则取消当前操作。

代码演示

public static void main(String[] args) throws Exception {
        //创建安全队列
        ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue<>();
        //多线程执行如对操作
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                queue.offer(i);
            }
        });
        Thread t2 = new Thread(() -> {
            for (int i = 6; i < 10; i++) {
                queue.offer(i);
            }
        });
        //线程启动
        t1.start();
        t2.start();
        //使用join保证多线程执行完毕之后才做后续操作
        t1.join();
        t2.join();
        //出队操作
        System.out.println("开始出队...");
        int size = queue.size();
        for (int i = 0; i < size; i++) {
            System.out.println(queue.poll());
        }
    }

输出结果:

开始出队...
0
6
1
2
7
3
8
4
9

因为多线程并行的原因,所以不能保证添加顺序。

posted @ 2022-12-30 04:37  Amireux-126  阅读(17)  评论(0)    收藏  举报