LinkedBlockingQueue是Java中基于链表的可选有界阻塞队列,通过putLock和takeLock两把锁实现高效线程安全,支持FIFO顺序和阻塞操作,常用于生产者-消费者模型;其构造时可指定容量,默认为Integer.MAX_VALUE,提供put、take、offer、poll等核心方法,使用时需注意设置合理容量以避免内存溢出,处理中断异常,并禁止插入null元素,适用于高并发场景,相比ArrayBlockingQueue具有更优的并发性能。
在Java中,LinkedBlockingQueue 是一个基于链表结构的可选有界阻塞队列,常用于多线程环境下实现线程安全的数据传递。它实现了 BlockingQueue 接口,内部通过独占锁(ReentrantLock)保证线程安全,适合生产者-消费者模型。
LinkedBlockingQueue 具备以下关键特点:
以下是 LinkedBlockingQueue 提供的核心方法:
下面是一个使用 LinkedBlockingQueue 实现生产者与消费者线程协作的完整例子:
import java.util.concurrent.LinkedBlockingQueue; public class ProducerConsumerExample { private static final LinkedBlockingQueue
queue = new LinkedBlockingQueue<>(5); // 容量为5 public static void main(String[] args) { Thread producer = new Thread(() -> { for (int i = 1; i <= 10; i++) { try { String item = "消息-" + i; queue.put(item); System.out.println("生产者发送:" + item); Thread.sleep(500); // 模拟生产耗时 } catch (InterruptedException e) { Thread.currentThread().interrupt(); break; } } }); Thread consumer = new Thread(() -> { while (!Thread.interrupted()) { try { String item = queue.take(); System.out.println("消费者接收:" + item); Thread.sleep(800); // 模拟消费耗时 } catch (InterruptedException e) { Thread.currentThread().interrupt(); break; } } }); producer.start(); consumer.start(); try { producer.join(); consumer.interrupt(); // 生产结束,中断消费者 } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }
在这个例子中:
实际开发中使用 LinkedBlockingQueue 需注意以下几点:
基本上就这些。LinkedBlockingQueue 是 Java 并发包中非常实用的线程安全队列,结合阻塞特性,能轻松实现稳定高效的生产者-消费者模式。合理使用,可大幅提升多线程程序的健壮性和可维护性。