📜  Java中的 BlockingQueue offer() 方法及示例(1)

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

Java中的 BlockingQueue offer() 方法及示例

在Java中,BlockingQueue是一个经常用到的工具类。它是一个线程安全的队列,常常被用来实现生产者消费者模式。

BlockingQueue提供了很多方法来管理队列,其中一个常用的方法是offer()

offer()方法

offer()方法尝试向BlockingQueue中添加一个元素,如果队列已满,则会直接返回false,否则会将元素添加到队列中并返回true。这个方法不会阻塞等待队列空余空间。

offer()方法有两个重载版本,一个是只带一个参数的,即元素本身;另一个是带两个参数的,第二个参数表示尝试添加的等待时间。

public boolean offer(E e);
public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException;
示例

以下是一个使用offer()方法的示例:

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

public class OfferExample {
    public static void main(String[] args) {
        // 创建一个容量为3的阻塞队列
        BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(3);

        // 尝试向队列添加元素
        System.out.println("offer 1 : " + queue.offer(1));
        System.out.println("offer 2 : " + queue.offer(2));
        System.out.println("offer 3 : " + queue.offer(3));

        // 队列已满,再次添加元素将返回false
        System.out.println("offer 4 : " + queue.offer(4));

        // 访问队列头部元素
        System.out.println("queue peek : " + queue.peek());

        // 尝试从队列中移除元素
        System.out.println("queue poll : " + queue.poll());
        System.out.println("queue poll : " + queue.poll());
        System.out.println("queue poll : " + queue.poll());

        // 队列为空,再次移除元素将返回null
        System.out.println("queue poll : " + queue.poll());
    }
}

输出结果为:

offer 1 : true
offer 2 : true
offer 3 : true
offer 4 : false
queue peek : 1
queue poll : 1
queue poll : 2
queue poll : 3
queue poll : null

从输出结果可以看出,当队列容量为3时,offer()方法添加了3个元素成功,而添加第4个元素时因队列已满而返回false。同时,peek()方法返回队列头部元素,poll()方法移除并返回队列头部元素,当队列为空时返回null