ArrayBlockingQueue

ArrayBlockingQueue是一个基于数组的有界阻塞队列,具有先进先出的特点。当队列满时,put操作会被阻塞,当队列空时,take操作也会被阻塞。示例中展示了add、offer、put、poll和take等方法的使用情况及其效果。
摘要由CSDN通过智能技术生成

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
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值