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 – 超时参数的TimeUnit。

返回值: 该方法从LinkedBlockingQueue的头部检索并移除元素,如果在指定的等待时间内没有元素可用,则为空。

异常 如果方法在等待元素可用时被中断,该方法会抛出InterruptedException。

注意BlockingQueuepoll() 方法是从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)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程