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的头部检索并移除元素,如果在指定的等待时间内没有元素可用,则为空。
异常 如果方法在等待元素可用时被中断,该方法会抛出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<String> BQ
= new LinkedBlockingQueue<String>(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[]
程序2 :
// 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<String> BQ
= new LinkedBlockingQueue<String>(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://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html#poll(long, %20java.util.concurrent.TimeUnit)