LinkedList、ConcurrentLinkedQueue、LinkedBlockingQueue对比分析

本文通过一个生产事故案例,分析了LinkedList在并发环境下的问题,并对比了ConcurrentLinkedQueue和LinkedBlockingQueue的性能和特性。重点讨论了它们的添加元素操作,指出ConcurrentLinkedQueue使用CAS实现无锁原子操作,而LinkedBlockingQueue使用ReentrantLock。此外,还提到了两者在取元素和性能上的区别,以及在不同场景下的适用性。
摘要由CSDN通过智能技术生成

写这篇文章源于我经历过的一次生产事故,在某家公司的时候,有个服务会收集业务系统的日志,此服务的开发人员在给业务系统的sdk中就因为使用了LinkedList,又没有做并发控制,就造成了此服务经常不能正常收集到业务系统的日志(丢日志以及日志上报的线程停止运行)。看一下add()方法的源码,我们就可以知道原因了:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

public boolean add(E e) {

    linkLast(e);//调用linkLast,在队列尾部添加元素

    return true;

}

 

void linkLast(E e) {

    final Node<E> l = last;

    final Node<E> newNode = new Node<>(l, e, null);

    last = newNode;

    if (l == null)

        first = newNode;

    else

        l.next = newNode;

    size++;//多线程情况下࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值