ArrayBlockingQueue 阻塞队列
底层是数组结构。
特点:
- 具有队列的先进先出(FIFO)特点
- 数组队列的容量是固定的
- 可实现阻塞式写入和阻塞式消费
示例
ArrayBlockingQueue queue = new ArrayBlockingQueue(3);
// add 追加元素。如果超出容量,会出现异常 IllegalStateException。
// queue.add("jack");
// queue.add("rose");
// queue.add("lily");
// queue.add("tom");
// System.out.println(queue); // [jack, rose, lily]
// 小技巧:Alt + J 快捷键,选取多个单词,实现批量修改。
// offer 追加元素。如果超出容量,直接返回 false,表示操作失败。
// queue.offer("jack");
// queue.offer("rose");
// queue.offer("lily");
// System.out.println(queue.offer("tom")); // 直接返回 false
// System.out.println(queue); // [jack, rose, lily]
// put 追加元素。如果超出容量,就会阻塞等待,后续的代码无法执行。
queue.put("jack");
System.out.println("第 1 个元素");
queue.put("rose");
System.out.println("第 2 个元素");
queue.put("lily");
System.out.println("第 3 个元素");
// 阻塞等待,后续的代码无法执行
// queue.put("tom");
// System.out.println("第 4 个元素");
System.out.println(queue); // [jack, rose, lily]
// poll 弹出元素。如果队列为空,返回 null。
// System.out.println(queue.poll()); // jack
// System.out.println(queue.poll()); // rose
// System.out.println(queue.poll()); // lily
// System.out.println(queue.poll()); // null
// System.out.println(queue); // []
// take 弹出元素。如果队列为空,会阻塞等待,后续的代码无法执行。
System.out.println(queue.take()); // jack
System.out.println(queue.take()); // rose
System.out.println(queue.take()); // lily
// System.out.println(queue.take()); // 阻塞等待
System.out.println(queue); // []
System.out.println(queue.size()); // 0
}