Java 数组阻塞队列 ArrayBlockingQueue
2022/3/2 20:46:06
本文主要是介绍Java 数组阻塞队列 ArrayBlockingQueue,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
参考
- 狂神说
描述
由数组支持的有界blocking queue 。 此队列命令元素FIFO(先进先出)。 队列的头部是队列中最长时间的元素。 队列的尾部是队列中最短时间的元素。 在队列的尾部插入新元素,队列检索操作获取队列头部的元素。
有些方法是继承的,所以一些方法在这个类 ArrayBlockingQueue 上面看不到。另外 add() 调用的 offer(),但是 offer() 不会报错,返回 null;remove() 调用的还是 poll(),但是 poll() 不会报错,返回 null。
方式 | 抛出异常 | 有返回值,不抛出异常 | 阻塞等待 | 超时等待 |
---|---|---|---|---|
添加 | boolean add(E e) | boolean offer(E e) | void put(E e) | boolean offer(E e, long timeout, TimeUnit unit) |
删除 | boolean remove() | E poll() | E take() | E poll (long timeout, TimeUnit unit) |
检查头元素 | E element() | E peek() |
代码
- add/remove 如果满了/如果为空则抛出异常
package thread; import java.util.concurrent.*; /** * @Author 夏秋初 * @Date 2022/3/2 19:00 */ public class Test { public static void main(String[] args) throws InterruptedException { ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(5); for (int i = 0; i < 5; i++) { System.out.println(arrayBlockingQueue.add(String.valueOf(i))); } for (int i = 0; i < 5; i++) { System.out.println(arrayBlockingQueue.remove()); } } }
- offer/poll 如果满了/如果为空则返回null
package thread; import java.util.concurrent.*; /** * @Author 夏秋初 * @Date 2022/3/2 19:00 */ public class Test { public static void main(String[] args) throws InterruptedException { ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(5); for (int i = 0; i < 5; i++) { System.out.println(arrayBlockingQueue.offer(String.valueOf(i))); } for (int i = 0; i < 5; i++) { System.out.println(arrayBlockingQueue.poll()); } } }
- put/take 如果满了/如果为空则等待元素的插入/取出
package thread; import java.util.concurrent.*; /** * @Author 夏秋初 * @Date 2022/3/2 19:00 */ public class Test { public static void main(String[] args) throws InterruptedException { ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(5); for (int i = 0; i < 5; i++) { arrayBlockingQueue.put(String.valueOf(i)); } for (int i = 0; i < 5; i++) { System.out.println(arrayBlockingQueue.take()); } } }
- offer/poll 如果满了/如果为空则根据指定时间等待元素的插入/取出,超出结束
package thread; import java.util.concurrent.*; /** * @Author 夏秋初 * @Date 2022/3/2 19:00 */ public class Test { public static void main(String[] args) throws InterruptedException { ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(5); // for (int i = 0; i < 5; i++) { // arrayBlockingQueue.offer(String.valueOf(i), 5, TimeUnit.SECONDS); // } for (int i = 0; i < 5; i++) { System.out.println(arrayBlockingQueue.poll(5, TimeUnit.SECONDS)); } } }
- element/peek 判断队列头是否有元素,有就返回/抛出异常
package thread; import java.util.concurrent.*; /** * @Author 夏秋初 * @Date 2022/3/2 19:00 */ public class Test { public static void main(String[] args) throws InterruptedException { ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(5); for (int i = 0; i < 5; i++) { arrayBlockingQueue.offer(String.valueOf(i), 5, TimeUnit.SECONDS); } // for (int i = 0; i < 5; i++) { // System.out.println(arrayBlockingQueue.poll(5, TimeUnit.SECONDS)); // } System.out.println(arrayBlockingQueue.element()); System.out.println(arrayBlockingQueue.peek()); } }
这篇关于Java 数组阻塞队列 ArrayBlockingQueue的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-01一个基于注解驱动的可视化的DDD架构-超越COLA的设计
- 2025-01-01PlantUML 时序图 基本例子
- 2025-01-01plantuml 信号时序图
- 2025-01-01聊聊springboot项目如何优雅进行数据校验
- 2024-12-31自由职业者效率提升指南:3个时间管理技巧搞定多个项目
- 2024-12-31适用于咨询行业的项目管理工具:提升跨团队协作和工作效率的最佳选择
- 2024-12-31高效协作的未来:2024年实时文档工具深度解析
- 2024-12-31商务谈判者的利器!哪 6 款办公软件能提升春节合作成功率?
- 2024-12-31小团队如何选择最实用的项目管理工具?高效协作与任务追踪指南
- 2024-12-31数据赋能,智慧养老:看板软件如何重塑养老服务生态