Java中PriorityBlockingQueue的offer()方法
1. 方法offer(E e)
PriorityBlockingQueue 的 offer(E e) 方法会将作为参数传递的元素 e 加入到此 PriorityBlockingQueue 中。由于此 PriorityBlockingQueue 是无界的,所以此方法永远不会被阻止。
语法:
public boolean offer(E e)
参数: 此方法接受一个参数 e 表示我们要在此 PriorityBlockingQueue 中插入的元素 e。
返回值: 如果插入成功,则此方法返回布尔响应 true。
异常: 此方法会抛出以下异常。
- ClassCastException – 如果指定的元素根据 PriorityBlockingQueue 的排序方法无法与当前优先级队列中的元素进行比较。
- NullPointerException – 如果元素为 null。
下面的程序演示了 PriorityBlockingQueue 的 offer() 方法:
示例1: 演示 PriorityBlockingQueue 上的 offer() 方法,以添加一组数字。
// Java Program Demonstrate offer()
// method of PriorityBlockingQueue
import java.util.concurrent.PriorityBlockingQueue;
public class GFG {
public static void main(String[] args)
{
// 定义 PriorityBlockingQueue 的容量
int capacityOfQueue = 5;
// 创建 PriorityBlockingQueue 对象
PriorityBlockingQueue<Integer> PrioQueue
= new PriorityBlockingQueue<Integer>(capacityOfQueue);
// 使用 offer() 向 PriorityBlockingQueue 添加数字
PrioQueue.offer(35658786);
PrioQueue.offer(5278367);
PrioQueue.offer(74381793);
PrioQueue.offer(87625142);
// 打印 PriorityBlockingQueue 的元素
System.out.println("队列内容:");
System.out.println(PrioQueue.toString());
}
}
输出:
队列内容:
[5278367, 35658786, 74381793, 87625142]
示例 2: 演示尝试将 null 添加到 PriorityBlockingQueue 时 offer() 方法抛出的异常。
// Java Program Demonstrate offer()
// method of PriorityBlockingQueue
import java.util.concurrent.PriorityBlockingQueue;
import java.util.*;
public class GFG {
public static void main(String[] args)
{
// 定义 PriorityBlockingQueue 的容量
int capacityOfQueue = 5;
// 创建 PriorityBlockingQueue 对象,其中包含学生的姓名
PriorityBlockingQueue<String> names
= new PriorityBlockingQueue<String>(capacityOfQueue);
// 添加女子学院学生的姓名
names.offer("Joyita");
names.offer("Priyanka");
// 在 offer() 方法中尝试插入 null 值
try {
names.offer(null);
}
catch (Exception e) {
// 打印错误详细信息
System.out.println("抛出异常:" + e);
}
}
}
输出:
抛出异常:java.lang.NullPointerException
2. 方法 offer(E e, long timeout, TimeUnit unit)
PriorityBlockingQueue的 offer(E e, long timeout, TimeUnit unit) 方法将作为参数传递的元素e插入到此PriorityBlockingQueue中。由于PriorityBlockingQueue是无界的,因此此方法永远不会被阻止并且将忽略timeout和timeUnit参数。此方法从父类priorityBlockingQueue继承,该类是BlockingQueue类,但是由于priorityBlockingQueue永远不会阻止新元素插入,因此从超类继承的方法在逻辑上与offer(E e)方法相同。
语法:
offer(E e, long timeout, TimeUnit unit)
参数: 此方法接受三个参数
- e :要插入PriorityBlockingQueue中的元素。
- timeout :由于队列永远不会阻止新元素插入,因此忽略此参数。
- unit :由于队列永远不会阻止新元素插入,因此忽略此参数。
返回值: 如果插入成功,则此方法返回布尔响应true。
异常: 此方法引发以下异常。
- ClassCastException -如果根据PriorityBlockingQueue的顺序无法将指定元素与当前在优先级队列中的元素进行比较。
- NullPointerException - 如果元素为空。
下面的程序演示了PriorityBlockingQueue的offer(E e, long timeout, TimeUnit unit)方法:
示例1: 程序演示了PriorityBlockingQueue的offer(E e, long timeout, TimeUnit unit)方法,以添加一组数字。
//Java程序演示了PriorityBlockingQueue offer()方法
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.TimeUnit;
public class GFG {
public static void main(String[] args){
//定义PriorityBlockingQueue的容量
int capacityOfQueue = 5;
//创建PriorityBlockingQueue对象
PriorityBlockingQueue<Integer> PrioQueue
= new PriorityBlockingQueue<Integer>(capacityOfQueue);
//使用offer(Element e, long timeout, TimeUnit unit)将3个元素添加到PriorityBlockingQueue中
System.out.println("添加 1234 "
+ PrioQueue.offer(1234,
5, TimeUnit.SECONDS));
System.out.println("添加 2345 "
+ PrioQueue.offer(2345,
5, TimeUnit.SECONDS));
System.out.println("添加 3456 "
+ PrioQueue.offer(3456,
5, TimeUnit.SECONDS));
//打印PriorityBlockingQueue的元素
System.out.println("队列包含:");
System.out.println(PrioQueue.toString());
}
}
输出:
添加 1234 true
添加 2345 true
添加 3456 true
队列包含:
[1234, 2345, 3456]
参考文献:
- https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/PriorityBlockingQueue.html#offer-E-
- https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/PriorityBlockingQueue.html#offer-E-long-java.util.concurrent.TimeUnit-
极客教程