在 Java 的并发包()中,(阻塞队列)是解决并发生产者-消费者问题的核心组件。它支持在队列为空时阻塞获取元素的线程,在队列满时阻塞添加元素的线程。 常见的 实现类有以下 7 种,它们在底层数据结构、有界/无界、锁机制和适用场景上各有不同: --- 1. ArrayBlockingQueue(基于数组的有界阻塞队列) 底层结构:数组。 是否有界:严格有界。必须在创建时指定容量(capacity),且创建后无法修改。 锁机制:使用一把全局 锁(出队和入队共用一把锁),因此并发度相对较低。 特点: 按照 FIFO(先进先出)原则对元素进行排序。 支持公平锁和非公平锁(默认非公平)。 内存分配连续,不会频繁产生 Node 对象,对 GC 友好。 适用场景:需要严格控制内存大小,且并发量不是极高的场景。 2. LinkedBlockingQueue(基于链表的阻塞队列) 底层结构:单向链表。 是否有界:可选有界。默认容量是 (通常被视为无界),也可以在创建时指定容量。 锁机制:分离锁(两把锁)。入队使用 ,出队使用 ,因此入队和出队可以并发执行,吞吐量通常高于 。 特点: 按照 FIF...