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 – 如果该元素为空。
下面的程序说明了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)
{
// define capacity of PriorityBlockingQueue
int capacityOfQueue = 5;
// create object of PriorityBlockingQueue
PriorityBlockingQueue<Integer> PrioQueue
= new PriorityBlockingQueue<Integer>(capacityOfQueue);
// Add numbers to PriorityBlockingQueue using offer()
PrioQueue.offer(35658786);
PrioQueue.offer(5278367);
PrioQueue.offer(74381793);
PrioQueue.offer(87625142);
// print elements of PriorityBlockingQueue
System.out.println("Queue Contains:");
System.out.println(PrioQueue.toString());
}
}
输出
Queue Contains:
[5278367, 35658786, 74381793, 87625142]
例2: 演示offer()方法在向PriorityBlockingQueue添加null时抛出的异常的程序。
// Java Program Demonstrate offer()
// method of PriorityBlockingQueue
import java.util.concurrent.PriorityBlockingQueue;
import java.util.*;
public class GFG {
public static void main(String[] args)
{
// define capacity of PriorityBlockingQueue
int capacityOfQueue = 5;
// create object of PriorityBlockingQueue which contains
// name of students
PriorityBlockingQueue<String> names
= new PriorityBlockingQueue<String>(capacityOfQueue);
// Add names of students of girls college
names.offer("Joyita");
names.offer("Priyanka");
// try to insert null value in offer method
try {
names.offer(null);
}
catch (Exception e) {
// print error details
System.out.println("Exception Thrown: " + e);
}
}
}
输出
Exception Thrown: 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 :这个参数也被忽略了,因为队列从不阻止新元素的插入。
返回: 如果插入成功,该方法返回布尔响应真。
异常: 该方法抛出以下异常。
- ClassCastException – 如果指定的元素不能根据PriorityBlockingQueue的排序与当前优先级队列中的元素进行比较。
- NullPointerException – 如果该元素为空。
下面的程序说明了PriorityBlockingQueue的offer(E e, long timeout, TimeUnit unit)方法:
示例1: 演示PriorityBlockingQueue的offer(E e, long timeout, TimeUnit unit)方法的程序,添加一个数字列表。
// Java Program Demonstrate offer()
// method of PriorityBlockingQueue
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.TimeUnit;
public class GFG {
public static void main(String[] args)
{
// define capacity of PriorityBlockingQueue
int capacityOfQueue = 5;
// create object of PriorityBlockingQueue
PriorityBlockingQueue<Integer> PrioQueue
= new PriorityBlockingQueue<Integer>(capacityOfQueue);
// Add 3 elements to PriorityBlockingQueue using
// offer(Element e, long timeout, TimeUnit unit)
System.out.println("adding 1234 "
+ PrioQueue.offer(1234,
5, TimeUnit.SECONDS));
System.out.println("adding 2345 "
+ PrioQueue.offer(2345,
5, TimeUnit.SECONDS));
System.out.println("adding 3456 "
+ PrioQueue.offer(3456,
5, TimeUnit.SECONDS));
// print elements of PriorityBlockingQueue
System.out.println("Queue Contains:");
System.out.println(PrioQueue.toString());
}
}
输出
adding 1234 true
adding 2345 true
adding 3456 true
Queue Contains:
[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-