Java中BlockingQueue的poll()方法及示例

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类中的 BlockingQueuepoll() 方法已从 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)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程