Java PriorityBlockingQueue offer()方法

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)

参数: 该方法接受三个参数

  1. e : 要插入PriorityBlockingQueue中的元素。
  2. timeout : 这个参数被忽略了,因为队列从不阻止新元素的插入。
  3. 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-

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程