在 Java 并发编程中,ArrayBlockingQueue 是一个非常实用的工具类。它实现了 BlockingQueue 接口,是一种基于数组结构的有界阻塞队列。本教程将从零开始,详细讲解 Java ArrayBlockingQueue 教程 的核心概念、基本用法和实际应用场景,即使是编程小白也能轻松上手!
ArrayBlockingQueue 是 Java 并发包(java.util.concurrent)提供的一个线程安全的阻塞队列。它的底层使用一个固定大小的数组来存储元素,因此容量是固定的,创建时必须指定。
所谓“阻塞”是指:当队列满时,再往里添加元素的操作会被阻塞;当队列空时,从中取元素的操作也会被阻塞。这种特性非常适合用于生产者-消费者模型。
创建 ArrayBlockingQueue 非常简单,只需指定容量即可:
// 创建一个容量为 5 的 ArrayBlockingQueueArrayBlockingQueue<String> queue = new ArrayBlockingQueue<>(5);// 创建一个容量为 10 的公平队列(按请求顺序分配锁)ArrayBlockingQueue<Integer> fairQueue = new ArrayBlockingQueue<>(10, true); ArrayBlockingQueue 提供了多种操作方法,主要分为以下几类:
| 类型 | 方法 | 行为 |
|---|---|---|
| 抛异常 | add(e), remove() | 失败时抛出异常 |
| 返回特殊值 | offer(e), poll() | 失败时返回 false 或 null |
| 阻塞 | put(e), take() | 失败时一直等待直到成功 |
| 超时阻塞 | offer(e, timeout, unit), poll(timeout, unit) | 等待指定时间后失败则返回 |
下面是一个经典的使用场景——生产者不断往队列放数据,消费者从队列取数据。这正是 阻塞队列使用 的典型应用。
import java.util.concurrent.ArrayBlockingQueue;public class ProducerConsumerExample { public static void main(String[] args) { // 创建容量为 3 的阻塞队列 ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<>(3); // 启动生产者线程 Thread producer = new Thread(() -> { try { for (int i = 1; i <= 5; i++) { System.out.println("生产者生产: " + i); queue.put(i); // 队列满时会阻塞 Thread.sleep(500); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }); // 启动消费者线程 Thread consumer = new Thread(() -> { try { while (true) { Integer item = queue.take(); // 队列空时会阻塞 System.out.println("消费者消费: " + item); Thread.sleep(1000); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }); producer.start(); consumer.start(); }} 运行上述代码,你会看到生产者和消费者交替工作,即使速度不同,也不会出现数据丢失或越界错误。这就是 Java 并发队列 的强大之处!
put()/take() 而不是 add()/remove(),以利用阻塞特性。NullPointerException。ArrayBlockingQueue 是 Java 并发编程中不可或缺的工具,特别适合用于控制资源访问、任务调度和线程间通信。通过本 ArrayBlockingQueue 示例 教程,你应该已经掌握了它的基本用法和核心思想。
现在,你可以尝试自己编写一个多线程程序,用它来协调不同线程之间的协作。记住:实践是最好的老师!
关键词回顾:Java ArrayBlockingQueue教程、阻塞队列使用、ArrayBlockingQueue示例、Java并发队列
本文由主机测评网于2025-12-10发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125837.html