Java中的 BlockingQueue poll() 方法及示例
BlockingQueue接口的poll(long timeout, TimeUnit unit)方法通过从队列中删除该元素来返回 BlockingQueue 的头部。可以说,这个方法从这个 LinkedBlockingQueue 的头部获取和移除元素。如果队列为空,则 poll() 方法将等待指定的时间让元素变为可用。
句法:
public E poll(long timeout, TimeUnit unit) throws
参数:此方法采用两个强制参数:
- timeout – 等待多长时间,以 unit 为单位。
- unit – 超时参数的 TimeUnit。
返回值:此方法从此 LinkedBlockingQueue 的头部检索和删除元素,如果在元素可用之前经过指定的等待时间,则返回 null。
异常如果方法在等待元素变为可用时被中断,则此方法将引发InterruptedException 。
注意: BlockingQueue的poll()方法继承自Java中的Queue类。
下面的程序说明了 BlockingQueue 的 poll(long timeout, TimeUnit unit) 方法:
程序 1 :
// Java program to demonstrate
// poll(long timeout, TimeUnit unit)
// method of LinkedBlockingQueue
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
public class GFG {
public static void main(String[] args)
throws InterruptedException
{
// define capacity of BlockingQueue
int capacityOfQueue = 4;
// create object of BlockingQueue
BlockingQueue BQ
= new LinkedBlockingQueue(capacityOfQueue);
// Add element to BlockingQueue
BQ.add("Ravi");
BQ.add("Suraj");
BQ.add("Harsh");
// print elements of queue
System.out.println("Items in Queue are " + BQ);
// Try to poll elements from BQ
// using poll(long timeout, TimeUnit unit) method
System.out.println("Removing item From head: "
+ BQ.poll(5, TimeUnit.SECONDS));
// print queue details
System.out.println("Now Queue Contains" + BQ);
// using poll(long timeout, TimeUnit unit) method
System.out.println("Removing item From head: "
+ BQ.poll(5, TimeUnit.SECONDS));
// print queue details
System.out.println("Now Queue Contains" + BQ);
// using poll(long timeout, TimeUnit unit) method
System.out.println("Removing item From head: "
+ BQ.poll(5, TimeUnit.SECONDS));
// print queue details
System.out.println("Now Queue Contains" + BQ);
// using poll(long timeout, TimeUnit unit) method
System.out.println("Removing item From head: "
+ BQ.poll(5, TimeUnit.SECONDS));
// print queue details
System.out.println("Now Queue Contains" + BQ);
}
}
输出:
Items in Queue are [Ravi, Suraj, Harsh]
Removing item From head: Ravi
Now Queue Contains[Suraj, Harsh]
Removing item From head: Suraj
Now Queue Contains[Harsh]
Removing item From head: Harsh
Now Queue Contains[]
Removing item From head: null
Now Queue Contains[]
方案二:
// Java program to demonstrate
// poll(long timeout, TimeUnit unit)
// method of LinkedBlockingQueue
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
public class GFG {
public static void main(String[] args)
throws InterruptedException
{
// define capacity of BlockingQueue
int capacityOfQueue = 2;
// create object of BlockingQueue
BlockingQueue BQ
= new LinkedBlockingQueue(capacityOfQueue);
// Add element to BlockingQueue
BQ.add("Gopal");
BQ.add("GFG");
// print elements of queue
System.out.println("Items in Queue are " + BQ);
// Try to poll elements from BQ
// using poll(long timeout, TimeUnit unit) method
System.out.println("Removing item From head: "
+ BQ.poll(2, TimeUnit.SECONDS));
// print queue details
System.out.println("Now Queue Contains" + BQ);
}
}
输出:
Items in Queue are [Gopal, GFG]
Removing item From head: Gopal
Now Queue Contains[GFG]
参考:https: Java/util/concurrent/BlockingQueue.html#poll(long, %20java.util.concurrent.TimeUnit)