Java中BlockingQueue的poll()方法及示例
BlockingQueue接口的 poll(long timeout, TimeUnit unit) 方法通过从队列中删除元素来返回BlockingQueue的头部。可以说这个方法从LinkedBlockingQueue的头部检索和删除元素。如果队列为空,则poll()方法会等待指定时间以等待元素变为可用。
语法:
public E poll(long timeout, TimeUnit unit) throws
参数: 此方法有两个必要的参数:
- timeout – 等待多长时间,以unit为单位。
- unit – timeout参数的TimeUnit。
返回值: 如队列为空,则此方法从LinkedBlockingQueue的头部检索和删除元素,或者在指定的等待时间过去之前没有元素可用时返回null。
异常: 如果等待元素变为可用时方法被中断,则此方法会抛出InterruptedException。
注意: :Java类中的 BlockingQueue 的 poll() 方法已从 Queue 类继承。
下面的程序说明了BlockingQueue的poll(long timeout, TimeUnit unit)方法:
程序1:
// Java程序演示
// LinkedBlockingQueue的
// poll(long timeout, TimeUnit unit)
// 方法
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
{
// 定义BlockingQueue的容量
int capacityOfQueue = 4;
// 创建BlockingQueue对象
BlockingQueue<String> BQ
= new LinkedBlockingQueue<String>(capacityOfQueue);
// 将元素添加到BlockingQueue中
BQ.add("Ravi");
BQ.add("Suraj");
BQ.add("Harsh");
// 打印队列中的元素
System.out.println("队列中的项是 " + BQ);
// 尝试使用poll(long timeout, TimeUnit unit)方法从BQ中轮询元素
System.out.println("从头部删除项:"
+ BQ.poll(5, TimeUnit.SECONDS));
// 打印队列细节
System.out.println("现在队列包含" + BQ);
// 使用poll(long timeout, TimeUnit unit)方法
System.out.println("从头部删除项:"
+ BQ.poll(5, TimeUnit.SECONDS));
// 打印队列细节
System.out.println("现在队列包含" + BQ);
// 使用poll(long timeout, TimeUnit unit)方法
System.out.println("从头部删除项:"
+ BQ.poll(5, TimeUnit.SECONDS));
// 打印队列细节
System.out.println("现在队列包含" + BQ);
// 使用poll(long timeout, TimeUnit unit)方法
System.out.println("从头部删除项:"
+ BQ.poll(5, TimeUnit.SECONDS));
// 打印队列细节
System.out.println("现在队列包含" + BQ);
}
}
队列中的项是 [Ravi, Suraj, Harsh]
从头部删除项:Ravi
现在队列包含[Suraj, Harsh]
从头部删除项:Suraj
现在队列包含[Harsh]
从头部删除项:Harsh
现在队列包含[]
从头部删除项:null
现在队列包含[]
程序2:
// Java程序演示
// LinkedBlockingQueue的poll(long timeout, TimeUnit unit)方法
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
{
// 定义BlockingQueue的容量
int capacityOfQueue = 2;
// 创建BlockingQueue对象
BlockingQueue<String> BQ
= new LinkedBlockingQueue<String>(capacityOfQueue);
// 向BlockingQueue添加元素
BQ.add("Gopal");
BQ.add("GFG");
// 打印队列元素
System.out.println("队列中的项是 " + BQ);
// 使用poll(long timeout, TimeUnit unit)方法从BQ中尝试获取元素
System.out.println("从队首移除的项为: "
+ BQ.poll(2, TimeUnit.SECONDS));
// 打印队列明细
System.out.println("现在队列包括" + BQ);
}
}
队列中的项是 [Gopal, GFG]
从队首移除的项为: Gopal
现在队列包括[GFG]
参考 : https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html#poll(long, %20java.util.concurrent.TimeUnit)
极客教程