📜  Java中的 LinkedTransferQueue offer() 方法

📅  最后修改于: 2022-05-13 01:54:40.014000             🧑  作者: Mango

Java中的 LinkedTransferQueue offer() 方法

offer(E e, long timeout, TimeUnit 单位)

Java .util.concurrent.LinkedTransferQueue类的offer(E e, long timeout, TimeUnit unit)方法是Java中的一个内置函数,如果队列不存在,它将作为参数传递给方法的元素插入到此队列的尾部满的。

  • 如果 LinkedTransferQueue 已满,它将等到指定的时间才有空间可用。
  • 指定的等待时间和 TimeUnit 将作为参数提供给 offer 方法,因此它将等待 LinkedTransferQueue 删除一些元素,以便 offer 方法可以将元素添加到 LinkedTransferQueue。

句法:

public boolean offer(E e, long timeout, TimeUnit unit)

参数:该函数接受以下参数:

  • e - 要插入的元素。
  • 超时
  • unit - 一个 TimeUnit 确定如何解释超时参数

返回值:该方法返回一个布尔值true 。由于队列是无界的,因此此方法永远不会阻塞或返回 false。

异常:当指定元素为 Null 时,函数显示NullPointerException

下面的程序说明了Java.util.concurrent.LinkedTransferQueue.offer() 的使用:

方案一:使用offer(E e, long timeout, TimeUnit unit)方法插入学生姓名创建LinkedTransferQueue,timeunit参数以秒为单位,超时参数为5sec

// 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
            queue = new LinkedTransferQueue();
  
        // 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
            queue = new LinkedTransferQueue();
  
        // add elements to queue
        try {
            queue.offer(null, 5, TimeUnit.SECONDS);
        }
        catch (Exception e) {
            System.out.println("Exception: " + e);
        }
    }
}
输出:
Exception: java.lang.NullPointerException

报价(E e)

Java .util.concurrent.LinkedTransferQueue类的offer(E e)方法是Java中的一个内置函数,如果队列有空间即队列未满,它将作为参数传递给该LinkedTransferQueue 尾部的方法的元素e 插入。如果队列已满,则应用 offer() 方法无效,因为 LinkedTransferQueue 将阻止要插入的元素。 offer() 方法在添加到 LinkedTransferQueue 的操作成功时返回 true,如果此队列已满,则返回 false。此方法优于 add() 方法,因为 add() 方法在队列已满时抛出错误,但 offer() 方法在这种情况下返回 false。

句法:

public boolean offer(E e)

参数:该函数接受单个参数e ,即要插入的元素。

返回值:该方法在插入成功时返回true

异常:当指定元素为 Null 时,函数显示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
            queue = new LinkedTransferQueue();
  
        // 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
            queue = new LinkedTransferQueue();
  
        // 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: Java/util/concurrent/LinkedTransferQueue.html#offer(E)
https://docs.oracle.com/javase/7/docs/api/java Java, %20long, %20java.util.concurrent.TimeUnit)