📜  Java中的 BlockingDeque offer()函数及示例(1)

📅  最后修改于: 2023-12-03 15:01:51.279000             🧑  作者: Mango

Java中的 BlockingDeque offer()函数及示例

什么是BlockingDeque?

BlockingDeque是Java中的一个接口,它继承自BlockingQueue接口,是一个双端队列,支持在队列两端插入和删除元素。BlockingDeque的实现类有ArrayBlockingDeque和LinkedBlockingDeque。

offer()函数的作用

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个元素。