Java中的ArrayBlockingQueue poll()方法

Java中的ArrayBlockingQueue poll()方法

ArrayBlockingQueue 是一种有界的、阻塞的队列,它在内部使用数组支持元素存储。

  • ArrayBlockingQueue 类是Java集合框架的成员。
  • “有界”意味着它将具有固定的大小,您不能超出队列的容量存储元素。
  • 队列还遵循先进先出规则,用于从队列中存储和删除元素。
  • 如果您尝试将元素放入已满的队列中或从空队列中取出元素,则队列将阻塞您。

根据传递的参数数量,有两种类型的poll()方法。

  1. 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()

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程