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

📅  最后修改于: 2022-05-13 01:54:50.194000             🧑  作者: Mango

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 的头部检索和删除元素,如果在元素可用之前经过指定的等待时间,则返回 null。

异常如果方法在等待元素变为可用时被中断,则此方法将引发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 BQ
            = new LinkedBlockingQueue(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[]

方案二

// 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 BQ
            = new LinkedBlockingQueue(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: Java/util/concurrent/BlockingQueue.html#poll(long, %20java.util.concurrent.TimeUnit)