📅  最后修改于: 2023-12-03 15:01:28.467000             🧑  作者: Mango
ArrayBlockingQueue 是 Java 中的一个实现了阻塞队列接口的类。阻塞队列是一种特殊的队列,具有线程安全和阻塞等特性,常用于多线程间的数据共享和通信。
ArrayBlockingQueue 实现了 BlockingQueue 接口,提供了一套线程安全的队列操作方法。相对于其他队列,ArrayBlockingQueue 有固定的容量大小,当队列满时,添加元素的操作会被阻塞,直到有空间可用;当队列空时,获取元素的操作也会被阻塞,直到有元素可用。
fair=true
可使得线程按照请求顺序访问。以下是 ArrayBlockingQueue 的一些常见用法示例:
// 创建一个容量大小为 10 的 ArrayBlockingQueue
ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<>(10);
try {
// 添加元素到队列末尾,如果队列已满会阻塞
queue.put("element");
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
// 获取并移除队列头部元素,如果队列为空会阻塞
String element = queue.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 添加元素到队列末尾,如果队列已满返回 false
boolean added = queue.offer("element");
// 获取并移除队列头部元素,如果队列为空返回 null
String element = queue.poll();
// 获取队列头部元素,如果队列为空返回 null
String element = queue.peek();
// 创建一个公平的 ArrayBlockingQueue
ArrayBlockingQueue<String> fairQueue = new ArrayBlockingQueue<>(10, true);
ArrayBlockingQueue 是一个线程安全的有界队列实现,常用于多线程环境下的数据共享和通信。其通过阻塞操作保证了数据的一致性和安全性,而且提供了可选的公平性支持。
需要注意的是,ArrayBlockingQueue 的容量大小是固定的,它不能自动扩容。在使用时应根据实际需求来确定合适的容量大小。