LinkedBlockingQueue类有两种类型的offer()方法:
报价(E、长超时、时间单位)
这个 报价(E、长超时、时间单位) 方法 LinkedBlockingQueue 如果队列未满,则在此LinkedBlockingQueue末尾插入作为参数传递给方法的元素。如果LinkedBlockingQueue已满,它将等待指定的时间,等待空间变为可用。指定的等待时间和时间单位将作为offer()方法的参数提供。因此,它将等待LinkedBlockingQueue删除一些元素,以便该方法可以向LinkedBlockingQueue添加元素。
语法:
public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException
参数: 此方法接受三个参数:
- E –要插入LinkedBlockingQueue的元素。
- 暂停 –报价方法等待插入新元素的时间为队列已满。
- 单元 –超时参数的时间单位。
返回值: 该方法返回 符合事实的 如果元素插入成功。否则它就会回来 错误的 如果指定的等待时间过后,空间才可用。
例外情况: 此方法引发以下异常:
- 空指针异常 –如果指定的元素为空。
- 中断异常 –如果在等待时被打断。
下面的程序演示了LinkedBlockingQueue类的提供(E、长超时、时间单位)方法:
项目1: 使用offer(E,long timeout,TimeUnit)方法插入学生姓名,创建LinkedBlockingQueue,该方法的TimeUnit参数以秒为单位,timeout参数为5秒。
// Java Program Demonstrate // offer(Element e, long timeout, TimeUnit unit) // method of LinkedBlockingQueue. import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; public class GFG { // Main method public static void main(String[] args) throws InterruptedException { // define capacity of LinkedBlockingQueue int capacityOfQueue = 4 ; // create object of LinkedBlockingQueue LinkedBlockingQueue<Integer> linkedQueue = new LinkedBlockingQueue<Integer>(capacityOfQueue); // 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 32673821 " + linkedQueue.offer( 32673821 , 5 , TimeUnit.SECONDS)); System.out.println( "adding 88527183: " + linkedQueue.offer( 88527183 , 5 , TimeUnit.SECONDS)); System.out.println( "adding 431278539: " + linkedQueue.offer( 431278539 , 5 , TimeUnit.SECONDS)); System.out.println( "adding 351278693: " + linkedQueue.offer( 351278693 , 5 , TimeUnit.SECONDS)); System.out.println( "adding 647264: " + linkedQueue.offer( 647264 , 5 , TimeUnit.SECONDS)); // print the elements of queue System.out.println( "list of numbers of queue:" + linkedQueue); // now queue is full check remaining capacity of queue System.out.println( "Empty spaces of queue : " + linkedQueue.remainingCapacity()); // try to add more Integer boolean response = linkedQueue.offer( 2893476 , 5 , TimeUnit.SECONDS); System.out.println( "Adding new Integer 2893476 is successful: " + response); } } |
adding 32673821 true adding 88527183: true adding 431278539: true adding 351278693: true adding 647264: false list of numbers of queue:[32673821, 88527183, 431278539, 351278693] Empty spaces of queue : 0 Adding new Integer 2893476 is successful: false
项目2: 显示由offer(元素e、长超时、TimeUnit)方法引发的异常
// Java Program Demonstrate // offer(Element e, long timeout, TimeUnit unit) // method of LinkedBlockingQueue. import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; public class GFG { public static void main(String[] args) throws InterruptedException { // define capacity of LinkedBlockingQueue int capacityOfQueue = 4 ; // create object of LinkedBlockingQueue LinkedBlockingQueue<Integer> linkedQueue = new LinkedBlockingQueue<Integer>(capacityOfQueue); // Add elements to ArrayBlockingQueue having // Timeout in seconds with value 5 secs in // offer(Element e, long timeout, TimeUnit unit) System.out.println( "Adding 283239 in Queue :" + linkedQueue.offer( 283239 , 5 , TimeUnit.SECONDS)); // try to put null value in offer method try { System.out.println( "Adding null in Queue: " + linkedQueue.offer( null , 5 , TimeUnit.SECONDS)); } catch (Exception e) { // print error details System.out.println( "Exception: " + e); } // print elements of queue System.out.println( "Items in Queue are " + linkedQueue); } } |
Adding 283239 in Queue :true Exception: java.lang.NullPointerException Items in Queue are [283239]
报价(E)
这个 报价(E) 方法 LinkedBlockingQueue 如果队列有空间,即队列未满,则在该LinkedBlockingQueue的尾部插入作为参数传递的元素e。如果队列已满,则应用offer()方法不会显示任何效果,因为LinkedBlockingQueue将阻止要插入的元素。当添加到LinkedBlockingQueue的操作成功时,offer()方法返回true;如果此队列已满,则返回false。此方法优于add()方法,因为add方法在队列已满时抛出错误,但在这种情况下offer()方法返回false。
语法:
public boolean offer(E e)
参数: 此方法采用强制参数 E 这是要插入LinkedBlockingQueue的元素。
返回值: 此方法返回 符合事实的 如果元素插入成功。否则它就会回来 错误的 .
例外情况: 方法抛出 空指针异常 如果指定的元素为空。
下面的程序演示了LinkedBlockingQueue类的offer()方法
项目1: 使用offer()方法插入学生姓名,创建LinkedBlockingQueue。
// Java Program Demonstrate // offer(Element e) // method of LinkedBlockingQueue. import java.util.concurrent.LinkedBlockingQueue; public class GFG { // Main method public static void main(String[] args) { // define capacity of LinkedBlockingQueue int capacityOfQueue = 4 ; // create object of LinkedBlockingQueue LinkedBlockingQueue<String> linkedQueue = new LinkedBlockingQueue<String>(capacityOfQueue); // Add element to LinkedBlockingQueue using offer linkedQueue.offer( "dean" ); linkedQueue.offer( "kevin" ); linkedQueue.offer( "sam" ); linkedQueue.offer( "jack" ); // print the elements of queue System.out.println( "list of names of queue:" ); System.out.println(linkedQueue); } } |
list of names of queue: [dean, kevin, sam, jack]
项目2: 检查LinkedBlockingQueue是否已满,然后插入新元素。
// Java Program Demonstrate // offer(Element e) // method of LinkedBlockingQueue. import java.util.concurrent.LinkedBlockingQueue; public class GFG { // Main method public static void main(String[] args) { // define capacity of LinkedBlockingQueue int capacityOfQueue = 4 ; // create object of LinkedBlockingQueue LinkedBlockingQueue<Integer> linkedQueue = new LinkedBlockingQueue<Integer>(capacityOfQueue); // Add element to LinkedBlockingQueue using offer linkedQueue.offer( 34567 ); linkedQueue.offer( 45678 ); linkedQueue.offer( 98323 ); linkedQueue.offer( 93758 ); // print the elements of queue System.out.println( "list of numbers of queue:" ); System.out.println(linkedQueue); // now queue is full check remaining capacity of queue System.out.println( "Empty spaces of queue : " + linkedQueue.remainingCapacity()); // try to add extra Integer boolean response = linkedQueue.offer( 2893476 ); System.out.println( "Adding new Integer 2893476 is successful: " + response); response = linkedQueue.offer( 456751 ); System.out.println( "Adding new Integer 456751 is successful: " + response); } } |
list of numbers of queue: [34567, 45678, 98323, 93758] Empty spaces of queue : 0 Adding new Integer 2893476 is successful: false Adding new Integer 456751 is successful: false
方案3: 显示offer()方法引发的异常
// Java Program Demonstrate offer(E e) // method of LinkedBlockingQueue import java.util.concurrent.LinkedBlockingQueue; public class GFG { public static void main(String[] args) throws InterruptedException { // define capacity of LinkedBlockingQueue int capacityOfQueue = 4 ; // create object of LinkedBlockingQueue LinkedBlockingQueue<String> linkedQueue = new LinkedBlockingQueue<String>(capacityOfQueue); // Add element using offer() method linkedQueue.offer( "Karan" ); // try to put null value in offer method try { linkedQueue.offer( null ); } catch (Exception e) { // print error details System.out.println( "Exception: " + e); } // print elements of queue System.out.println( "Items in Queue are " + linkedQueue); } } |
Exception: java.lang.NullPointerException Items in Queue are [Karan]
参考:
- https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/LinkedBlockingQueue.html#offer-E-long-java。util。同时发生的时间单位-
- https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/LinkedBlockingQueue.html#offer-E-