Java LinkedTransferQueue offer()方法
offer(E e, long timeout, TimeUnit unit)
java.util.concurrent.LinkedTransferQueue类的 offer(E e, long timeout, TimeUnit unit) 方法是Java中的一个内置函数,如果队列未满,它将把作为参数传递给方法的元素插入该队列的尾部。
- 如果LinkedTransferQueue是满的,它将会等待到指定的时间,让空间变得可用。
- 指定的等待时间和时间单位将作为参数提供给offer方法,因此它将等待LinkedTransferQueue删除一些元素,以便offer方法能够将元素添加到LinkedTransferQueue中。
语法
public boolean offer(E e, long timeout, TimeUnit unit)
参数: 该函数接受以下参数。
- e – 要插入的元素。
- timeout
- unit – 一个决定如何解释超时参数的TimeUnit。
返回值: 该方法返回一个布尔值true。由于队列是无界的,这个方法将永远不会阻塞或返回错误。
异常: 当指定元素为空时,该函数显示 NullPointerException 。
下面的程序说明了java.util.concurrent.LinkedTransferQueue.offer()的用法。
程序1: 使用offer(E e, long timeout, TimeUnit unit)方法创建LinkedTransferQueue,该方法的timeunit参数为秒,timeout参数为5秒。
// Java Program Demonstrate offer()
// method of LinkedTransferQueue
import java.util.concurrent.*;
class GFG {
public static void main(String[] args)
throws InterruptedException
{
// create object of LinkedTransferQueue
LinkedTransferQueue<Integer>
queue = new LinkedTransferQueue<Integer>();
// Add 5 elements to ArrayBlockingQueue having
// Timeout in seconds with value 5 secs in
// offer(Element e, long timeout, TimeUnit unit)
System.out.println("adding 15 "
+ queue.offer(15, 5, TimeUnit.SECONDS));
System.out.println("adding 25: "
+ queue.offer(25, 5, TimeUnit.SECONDS));
System.out.println("adding 35: "
+ queue.offer(35, 5, TimeUnit.SECONDS));
System.out.println("adding 45: "
+ queue.offer(45, 5, TimeUnit.SECONDS));
System.out.println("adding 55: "
+ queue.offer(55, 5, TimeUnit.SECONDS));
// print the elements of queue
System.out.println("list of numbers of queue: "
+ queue);
}
}
输出:
adding 15 true
adding 25: true
adding 35: true
adding 45: true
adding 55: true
list of numbers of queue: [15, 25, 35, 45, 55]
程序2: 显示NullPointerException的程序。
// Java Program Demonstrate offer()
// method of LinkedTransferQueue
import java.util.concurrent.*;
class GFG {
public static void main(String[] args)
throws InterruptedException
{
// Initializing the queue
LinkedTransferQueue<Integer>
queue = new LinkedTransferQueue<Integer>();
// add elements to queue
try {
queue.offer(null, 5, TimeUnit.SECONDS);
}
catch (Exception e) {
System.out.println("Exception: " + e);
}
}
}
输出:
Exception: java.lang.NullPointerException
offer(E e)
java.util.concurrent.LinkedTransferQueue类的 offer(E e) 方法是Java中的一个内置函数,如果队列有空间,即队列未满,则将作为参数传递给方法的元素e插入该LinkedTransferQueue的尾部。如果队列是满的,那么应用offer()方法就没有效果,因为LinkedTransferQueue会阻止元素的插入。offer()方法在向LinkedTransferQueue添加操作成功时返回true,如果队列是满的,则返回false。这个方法比add()方法更受欢迎,因为add方法在队列已满时抛出错误,但是offer()方法在这种情况下返回false。
语法
public boolean offer(E e)
参数: 该函数接受一个参数,即要插入的元素。
返回值: 该方法在插入成功后返回true。
异常: 当指定元素为空时,该函数显示NullPointerException。
程序1: 在队列中添加字符串。
// Java Program Demonstrate offer()
// method of LinkedTransferQueue
import java.util.concurrent.*;
class GFG {
public static void main(String[] args)
{
// Initializing the queue
LinkedTransferQueue<String>
queue = new LinkedTransferQueue<String>();
// Adding elements to this queue
queue.offer("alex");
queue.offer("bob");
queue.offer("chuck");
queue.offer("drake");
queue.offer("eric");
// Printing the elements of the queue
System.out.print("Queue: ");
for (String i : queue)
System.out.print(i + " ");
}
}
输出:
Queue: alex bob chuck drake eric
程序2: 显示NullPointerException的程序。
// Java Program Demonstrate offer()
// method of LinkedTransferQueue
import java.util.concurrent.LinkedTransferQueue;
class GFG {
public static void main(String[] args)
throws InterruptedException
{
// Initializing the queue
LinkedTransferQueue<Integer>
queue = new LinkedTransferQueue<Integer>();
// add elements to queue
queue.offer(10);
queue.offer(20);
queue.offer(30);
try {
queue.offer(null);
}
catch (Exception e) {
System.out.println("Exception: " + e);
}
}
}
输出:
Exception: java.lang.NullPointerException
参考: https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedTransferQueue.html#offer(E)
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedTransferQueue.html#offer(E, %20long, %20java.util.concurrent.TimeUnit)