并发包中的ConcurrentLinkedQueue和LinkedBlockingQueue有什么区别?

20 篇文章 0 订阅 ¥49.90 ¥99.00
本文探讨了Java并发包中ConcurrentLinkedQueue和LinkedBlockingQueue的区别。ConcurrentLinkedQueue基于lock-free实现,提供高吞吐量,而LinkedBlockingQueue内部使用锁并提供BlockingQueue的阻塞方法。两者在并发容器设计、性能和功能上有明显差异,适用于不同的并发场景。面试中理解这些区别有助于选择合适的并发队列实现。
摘要由CSDN通过智能技术生成

如果面试问道

并发包中的ConcurrentLinkedQueue和LinkedBlockingQueue有什么区别?

你会如何回答呢?

我的回答

有时候我们把并发包下面的所有容器都习惯叫作并发容器,但是严格来讲,类似 ConcurrentLinkedQueue 这种“Concurrent*”容器,才是真正代表并发。

关于问题中它们的区别:

  • Concurrent 类型基于 lock-free,在常见的多线程访问场景,一般可以提供较高吞吐量。

  • 而 LinkedBlockingQueue 内部则是基于锁,并提供了 BlockingQueue 的等待性方法。

不知道你有没有注意到,java.util.concurrent 包提供的容器(Queue、List、Set)、Map,从命名上可以大概区分为 Concurrent*、CopyOnWrite和 Blocking等三类,同样是线程安全容器,可以简单认为:

  • Concurrent 类型没有类似 CopyOnWrite 之类容器相对较重的修改开销。

  • 但是,凡事都是有代价的,Concurrent 往往提供了较低的遍历一致性。你可以这样理解所谓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值