亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java ArrayBlockingQueue 进阶指南:有界阻塞队列与线程安全操作

Java ArrayBlockingQueue

探索 Java ArrayBlockingQueue — 学习如何创建、操作并线程安全地使用此固定大小的阻塞队列,附清晰示例。

ArrayBlockingQueue 类在 Java 集合框架中提供有界、线程安全的队列,底层由数组支撑。它实现 BlockingQueue 接口,允许生产者和消费者通过阻塞操作协调。

Java ArrayBlockingQueue 进阶指南:有界阻塞队列与线程安全操作


创建 ArrayBlockingQueue

导入 java.util.concurrent.ArrayBlockingQueue 并指定固定容量实例化:

ArrayBlockingQueue<Type> queue = new ArrayBlockingQueue<>(capacity);

Type 为元素类型,capacity 为最大容量。

注意: 容量为必填,决定队列的有界大小。


ArrayBlockingQueue 的核心方法

该类实现 BlockingQueue 的所有插入、访问、移除方法。以下为最常用操作。

插入元素

ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);
animals.add("Dog");
animals.offer("Cat");
animals.offer("Horse");
System.out.println("ArrayBlockingQueue: " + animals);

输出: ArrayBlockingQueue: [Dog, Cat, Horse]

访问元素

String head = animals.peek();
System.out.println("队头元素: " + head);
Iterator<String> it = animals.iterator();
while (it.hasNext()) {
    System.out.print(it.next() + ", ");
}

输出: 队头元素: Dog 后跟元素列表。

移除元素

String removed1 = animals.remove();
String removed2 = animals.poll();
animals.clear();
System.out.println("更新后的队列: " + animals);

输出: 更新后的队列: []


阻塞操作:put() 与 take()

这两个方法是生产者-消费者模式的关键。它们阻塞直到操作可执行,确保线程协调。

put()

插入元素,队列满时等待。可能抛 InterruptedException。

try {
    animals.put("Dog");
    animals.put("Cat");
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

take()

移除并返回队头,队列空时等待。可能抛 InterruptedException。

try {
    String element = animals.take();
    System.out.println("移除: " + element);
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

其他便捷方法

方法说明
contains(Object o)队列包含指定元素返回 true
size()返回当前元素数量
toArray()转换为数组
toString()队列的字符串表示

为何选择 ArrayBlockingQueue?

因其提供:

当生产者速度慢于消费者时,消费者自动阻塞,避免忙等待,保证 CPU 高效利用。


java

  1. 精通 Java 运算符:类型、语法与实战示例
  2. Java 注释:类型、用法与最佳实践
  3. 精通 Java if…else:控制流全解析
  4. 精通 Java 增强 for 循环:语法、示例与最佳实践
  5. Java break 语句:用法、时机与标签 break 详解
  6. 精通 Java 字符串:创建、方法与最佳实践
  7. 精通 Java 接口:概念、实现与最佳实践
  8. 精通 Java 匿名内部类:定义、语法与实战示例
  9. 精通 Java Try-With-Resources:自动资源管理详解
  10. Java 注解详解:类型、放置位置与实战示例
  11. Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
  12. 深入理解 Java Vector:用法、特性及与 ArrayList 的对比