Java中的ArrayBlockingQueue poll()方法
ArrayBlockingQueue 是一种有界的、阻塞的队列,它在内部使用数组支持元素存储。
- ArrayBlockingQueue 类是Java集合框架的成员。
- “有界”意味着它将具有固定的大小,您不能超出队列的容量存储元素。
- 队列还遵循先进先出规则,用于从队列中存储和删除元素。
- 如果您尝试将元素放入已满的队列中或从空队列中取出元素,则队列将阻塞您。
根据传递的参数数量,有两种类型的poll()方法。
- poll() 方法 从队列的头部检索并删除元素 。如果队列为空,则该方法将返回null。
语法:
public E poll()
返回值: 该方法返回此队列头部的元素;如果此队列为空,则返回null。
以下程序演示了ArrayBlockingQueue的poll()方法。
程序1:
/*
*演示ArrayBlockingQueue的poll()方法的程序。
*/
import java.util.concurrent.ArrayBlockingQueue;
public class GFG {
public static void main(String[] args)
{
//定义ArrayBlockingQueue的容量
int capacity = 5;
//创建ArrayBlockingQueue对象
ArrayBlockingQueue<Integer> queue = new
ArrayBlockingQueue<Integer>(capacity);
//添加元素到ArrayBlockingQueue
queue.offer(423);
queue.offer(233);
queue.offer(356);
//打印元素
System.out.println("Queue Contains" + queue);
//尝试获取元素
System.out.println("Removing From head: " +
queue.poll());
System.out.println("Queue Contains" + queue);
System.out.println("Removing From head: " +
queue.poll());
System.out.println("Queue Contains" + queue);
System.out.println("Removing From head: " +
queue.poll());
System.out.println("Queue Contains" + queue);
System.out.println("Removing From head: " +
queue.poll());
System.out.println("Queue Contains" + queue);
}
}
输出:
Queue Contains[423, 233, 356]
Removing From head: 423
Queue Contains[233, 356]
Removing From head: 233
Queue Contains[356]
Removing From head: 356
Queue Contains[]
Removing From head: null
Queue Contains[]
程序2:
/*
*演示ArrayBlockingQueue的poll()方法的程序。
*/
import java.util.concurrent.ArrayBlockingQueue;
public class GFG {
public static void main(String[] args)
{
//定义ArrayBlockingQueue的容量
int capacity = 5;
//创建ArrayBlockingQueue对象
ArrayBlockingQueue<Integer> queue = new
ArrayBlockingQueue<Integer>(capacity);
//添加元素到ArrayBlockingQueue
queue.offer(423);
queue.offer(233);
queue.offer(356);
//打印元素
System.out.println("Queue Contains" + queue);
//尝试获取元素
System.out.println("Removing From head: " +
queue.poll());
System.out.println("Queue Contains" + queue);
System.out.println("Removing From head: " +
queue.poll());
System.out.println("Queue Contains" + queue);
System.out.println("Removing From head: " +
queue.poll());
System.out.println("Queue Contains" + queue);
System.out.println("Removing From head: " +
queue.poll());
System.out.println("Queue Contains" + queue);
}
}
输出:
删除名称为 Aman 的用户
删除名称为 Sanjeet 的用户
删除名称为 null 的用户
- poll( long timeout, TimeUnit unit ) 方法 检索并删除此队列的头部元素 。如果队列为空,则它将等待指定的时间,直到有元素可用为止。
语法:
public E poll(long timeout, TimeUnit unit) throws InterruptedException
参数: 该方法有两个参数:
- timeout (long) – 在放弃之前等待多长时间,以 unit 为单位。
- unit (TimeUnit) – 决定如何解释 timeout 参数的 TimeUnit。
返回值: 该方法返回此队列的头部,如果在指定的等待时间之前没有元素可用,则返回 null。
异常: 该方法在等待时被中断时会抛出 InterruptedException。
下面的程序演示了 ArrayBlockingQueue 的 poll(long timeout, TimeUnit unit) 方法。
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;
public class GFG {
public static void main(String[] args)
throws InterruptedException
{
// 定义ArrayBlockingQueue的容量
int capacity = 5;
// 创建ArrayBlockingQueue对象
ArrayBlockingQueue<Integer> queue =
new ArrayBlockingQueue<Integer>(capacity);
// 向ArrayBlockingQueue添加元素
queue.offer(423);
queue.offer(233);
queue.offer(356);
// 打印元素
System.out.println("队列包含" + queue);
// 尝试从队列中poll元素
System.out.println("从头部删除:"
+ queue.poll(10, TimeUnit.SECONDS));
System.out.println("队列包含" + queue);
System.out.println("从头部删除:"
+ queue.poll(10, TimeUnit.SECONDS));
System.out.println("队列包含" + queue);
System.out.println("从头部删除:"
+ queue.poll(10, TimeUnit.SECONDS));
System.out.println("队列包含" + queue);
System.out.println("从头部删除:"
+ queue.poll(10, TimeUnit.SECONDS));
}
}
输出:
队列包含[423, 233, 356]
从头部删除: 423
队列包含[233, 356]
从头部删除: 233
队列包含[356]
从头部删除: 356
队列包含[]
从头部删除: null
参考文献:
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ArrayBlockingQueue.html#poll()
极客教程