📅  最后修改于: 2023-12-03 15:16:20.789000             🧑  作者: Mango
在Java中,BlockingQueue是一个经常用到的工具类。它是一个线程安全的队列,常常被用来实现生产者消费者模式。
BlockingQueue提供了很多方法来管理队列,其中一个常用的方法是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
。