📅  最后修改于: 2023-12-03 15:01:51.279000             🧑  作者: Mango
BlockingDeque是Java中的一个接口,它继承自BlockingQueue接口,是一个双端队列,支持在队列两端插入和删除元素。BlockingDeque的实现类有ArrayBlockingDeque和LinkedBlockingDeque。
offer()函数是BlockingDeque接口中的一个方法,用于向队列中插入元素。它有两个重载方法:
boolean offer(E e);
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException;
第一个方法将元素插入到队列的尾部,并返回true。如果队列已满,则立即返回false。
第二个方法将元素插入到队列的尾部,并等待指定时间,如果在指定的时间内队列还未满,则插入成功并返回true。如果在等待时间内队列已满,则返回false。
下面是一个使用BlockingDeque的示例程序,它创建了一个ArrayBlockingDeque实例,并向队列中插入10个元素,超过队列的容量大小,然后又使用offer()函数向队列中插入1个元素,最后打印出队列中的所有元素。
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingDeque;
public class BlockingDequeExample {
public static void main(String[] args) {
// 创建一个容量为10的ArrayBlockingDeque实例
BlockingDeque<Integer> deque = new ArrayBlockingDeque<>(10);
// 将10个元素插入队列中,超过了队列容量大小
for (int i = 1; i <= 10; i++) {
deque.offer(i);
}
// 尝试将元素11插入队列中,由于队列已满,插入失败,返回false
boolean result = deque.offer(11);
System.out.println("offer a new element 11: " + result);
// 打印出队列中的所有元素
System.out.println("all elements in deque:");
while (!deque.isEmpty()) {
System.out.print(deque.poll() + " ");
}
}
}
输出结果如下:
offer a new element 11: false
all elements in deque:
1 2 3 4 5 6 7 8 9 10
可以看到,尝试往队列中插入元素11时由于队列已满,插入失败,最终打印出的队列中只有10个元素。