ConcurrentLinkedQueue和LinkedBlockingQueue的区别
ConcurrentLinkedQueue | LinkedBlockingQueue | |
---|---|---|
是否有锁 | CAS的无锁技术 | 有锁 |
是否有界 | 无界 | 有界(容易误解) |
Concurrent 类型基于CAS的无锁技术,在常见的多线程访问场景,一般可以提供较高吞吐量。
而 LinkedBlockingQueue 内部则是基于锁,并提供了 BlockingQueue 的等待性方法。
ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列
LinkedBlockingQueue,容易被误解为无边界,但其实其行为和内部代码都是基于有界的逻辑实现的,只不过如果我们没有在创建队列时就指定容量,那么其容量限制就自动被设置为 Integer.MAX_VALUE,成为了无界队列。