JAVA中的LinkedBlockingQueue | offer()方法

LinkedBlockingQueue类有两种类型的offer()方法:

null

报价(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]

参考:

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享