当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java ArrayBlockingQueue take()用法及代码示例


ArrayBlockingQueue是有界的阻塞队列,该队列内部使用数组支持的元素存储。

  • ArrayBlockingQueue类是Java Collections Framework的成员。
  • 有界意味着它将具有固定的大小,您不能存储数量超过队列容量的元素。
  • 队列还遵循FIFO(先进先出)规则,用于存储和删除队列中的元素。
  • 如果您尝试将一个元素放入一个完整的队列或从一个空队列中取出一个元素,那么该队列将阻塞。

take()方法用于检索和删除此队列的头。如果队列为空,则它将等待直到元素可用。

用法:


public E take()throws InterruptedException

参数:该方法不带任何参数。

返回值:该方法返回此队列开头的值。

异常:如果在等待时被中断,该方法将抛出InterruptedException。

以下示例程序旨在说明ArrayBlockingQueue的take()方法:
程序1

// Program to demonstrate take() method of ArrayBlockingQueue 
  
import java.util.concurrent.ArrayBlockingQueue; 
  
public class GFG { 
  
public static void main(String[] args)  
                  throws InterruptedException{ 
    // Define capacity of ArrayBlockingQueue 
    int capacity = 5; 
      
    // Create object of ArrayBlockingQueue 
    ArrayBlockingQueue<Integer> queue =  
        new ArrayBlockingQueue<Integer>(capacity); 
      
    // Add elements to ArrayBlockingQueue 
    queue.add(23); 
    queue.add(32); 
    queue.add(45); 
    queue.add(12); 
      
    // Print queue after adding numbers 
    System.out.print("After addding numbers Queue: "
                                                +queue); 
  
        // Apply take() method 
    int head=queue.take(); 
      
    // Print head of queue using take() method 
    System.out.println("Head of queue removed is "
                                                +head); 
    System.out.print("After removing head. Queue: "); 
    System.out.println(queue); 
      
    // Apply take() method 
    head = queue.take(); 
      
    // Print head of queue using take() method 
    System.out.println("Head of queue removed is " 
                                               + head); 
    System.out.print("After removing head. Queue: "); 
    System.out.println(queue); 
      
}  
}
输出:
After addding numbers Queue: [23, 32, 45, 12]Head of queue removed is 23
After removing head. Queue: [32, 45, 12]
Head of queue removed is 32
After removing head. Queue: [45, 12]

示例2:

// Program to demonstrate take() method of ArrayBlockingQueue 
  
import java.util.concurrent.ArrayBlockingQueue; 
  
public class GFG { 
  
    // Create a User Object with name  
    // and age as the attribute 
    public class User { 
  
        public String name; 
        public String age; 
        User(String name, String age) 
        { 
            this.name = name; 
            this.age = age; 
        } 
    } 
  
    // Main Method 
    public static void main(String[] args)  
                        throws InterruptedException 
    { 
        GFG gfg = new GFG(); 
        gfg.takeMethodExample(); 
    } 
  
    // Method to give example of take function 
    public void takeMethodExample()  
                        throws InterruptedException 
    { 
  
        // define capacity of ArrayBlockingQueue 
        int capacity = 5; 
  
        // create object of ArrayBlockingQueue 
        ArrayBlockingQueue<User> queue =  
               new ArrayBlockingQueue<User>(capacity); 
  
        // create user objects 
        User user1 = new User("Aman", "24"); 
        User user2 = new User("Amar", "23"); 
        User user3 = new User("Sanjeet", "25"); 
        User user4 = new User("Suvo", "26"); 
        User user5 = new User("Ravi", "22"); 
  
        // Add Objects to ArrayBlockingQueue 
        queue.offer(user1); 
        queue.offer(user2); 
        queue.offer(user3); 
        queue.offer(user4); 
        queue.offer(user5); 
  
        // find take() of queue 
        User head = queue.take(); 
  
        // print head 
        System.out.println("Details of User Removed"
                    +" After Applying take() Method"); 
        System.out.println("User Name : " + head.name); 
        System.out.println("User Age : " + head.age); 
  
        // find take() of queue 
        head = queue.take(); 
  
        // print head 
        System.out.println("Details of User Removed"+ 
                      " After Applying take() Method"); 
        System.out.println("User Name : " + head.name); 
        System.out.println("User Age : " + head.age); 
    } 
}
输出:
Details of User Removed After Applying take() Method
User Name : Aman
User Age : 24
Details of User Removed After Applying take() Method
User Name : Amar
User Age : 23

参考: https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ArrayBlockingQueue.html#take()



相关用法


注:本文由纯净天空筛选整理自AmanSingh2210大神的英文原创作品 ArrayBlockingQueue take() method in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。