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


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


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

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

rainageTo(Collection c)方法从此队列中删除所有可用的元素,并将它们添加到给定的集合中。还可以通过提供元素“ n”的数量作为方法的第二个参数来固定需要消耗的元素数量。
根据传递给它的参数,drainTo方法有两种类型:

  1. drainTo()方法用于将所有元素传输到集合。排空操作比使用循环重复轮询此队列更有效。尝试将元素添加到集合c时,也可能会遇到失败,因此,当引发关联的异常时,失败元素可能不会出现在两个集合中的任何一个或两个集合中。如果您尝试将队列排空到自己,则会抛出IllegalArgumentException。如果在操作进行过程中修改了指定的集合,则此操作的行为是undefined。因此,使用此类方法时,我们需要注意这种情况,以便我们克服异常。
    用法:
    public int drainTo(Collection c)

    参数:该方法接受一个参数c,该参数c表示要转移元素的集合
    返回值:该方法返回消耗的元素数。
    异常:该方法可能会引发三种类型的异常:

    • UnsupportedOperationException–如果指定的集合不支持元素的添加
    • ClassCastException–如果此队列元素的类阻止将其添加到指定的集合中
    • NullPointerException –如果指定的集合为null
    • IllegalArgumentException–如果指定的集合是此队列,或者此队列的元素的某些属性阻止将其添加到指定的集合

    以下示例程序旨在说明ArrayBlockingQueue的raineTo(Collection c)方法。

    // Program to demonstrate drainTo(Collection c) 
      
    import java.util.ArrayList; 
    import java.util.concurrent.ArrayBlockingQueue; 
      
    public class GFG { 
      
        public static void main(String[] args) 
        { 
            // Define capacity of ArrayBlockingQueue 
            int capacity = 10; 
      
            // Create object of  ArrayBlockingQueue 
            ArrayBlockingQueue queue = new 
                  ArrayBlockingQueue(capacity); 
      
            // Add elements to ArrayBlockingQueue 
            queue.add(23); 
            queue.add(32); 
            queue.add(45); 
            queue.add(12); 
            queue.add(27); 
            queue.add(67); 
      
            // Print queue before drainTo operation 
            System.out.println("Before drainTo Operation"); 
            System.out.println("queue = " + queue); 
      
            // Create Collection object to  
            // tranfer elements 
            ArrayList list = new 
                               ArrayList(); 
      
            // Call drainTo method of queue  
            // and pass collection as parameter. 
            queue.drainTo(list); 
      
            // Print queue before drainTo operation 
            System.out.println("After drainTo Operation"); 
            System.out.println("queue = " + queue); 
            System.out.println("collection = " + list); 
        } 
    }
    输出:
    Before drainTo Operation
    queue = [23, 32, 45, 12, 27, 67]
    After drainTo Operation
    queue = []
    collection = [23, 32, 45, 12, 27, 67]
    
  2. rainageTo(Collection c,int maxElements)方法用于将固定数量的元素传输到collection。在传输指定元素的编号后,ArrayBlocking队列仅包含那些未传输到collection的元素。此函数与上述函数相同,但具有一些限制。
    用法:
    public int drainTo(Collection c, int maxElements)

    参数:该方法接受两个参数:

    • C–这是指转移元素的集合。
    • maxElements –这是整数类型,是指要转移到集合中的最大元素数。

    返回值:
    消耗的元素数量。
    异常:

    • UnsupportedOperationException–如果指定的集合不支持元素的添加
    • ClassCastException–如果此队列元素的类阻止将其添加到指定的集合中
    • NullPointerException –如果指定的集合为null
    • IllegalArgumentException–如果指定的集合是此队列,或者此队列的元素的某些属性阻止将其添加到指定的集合

    以下示例程序旨在说明ArrayBlockingQueue的drainTo(Collection c,int maxElements)方法的用法。

    // Program Demonstrate drainTo(Collection c, int maxElements)  
    // method of ArrayBlockingQueue 
      
    import java.util.ArrayList; 
    import java.util.concurrent.ArrayBlockingQueue; 
      
    public class GFG { 
      
        public static void main(String[] args) 
        { 
            // Define capacity of ArrayBlockingQueue 
            int capacity = 10; 
      
            // Create object of  ArrayBlockingQueue 
            ArrayBlockingQueue queue = new 
                   ArrayBlockingQueue(capacity); 
      
            // Add elements to ArrayBlockingQueue 
            queue.add("aman"); 
            queue.add("sudhir"); 
            queue.add("harsh"); 
            queue.add("rahul"); 
            queue.add("raunak"); 
      
            // Print queue before drainTo operation 
            System.out.println("Before drainTo Operation"); 
            System.out.println("queue = " + queue); 
      
            // Tranfer elements from ArrayBlockingQueue; 
            ArrayList list = new ArrayList(); 
      
            // Define no of elements to be  tranfered 
            int maxElements = 3; 
      
            // Call drainTo method of queue and pass  
            // the collection as parameter. 
            queue.drainTo(list, maxElements); 
      
            // Print queue before drainTo operation 
            System.out.println("After drainTo Operation"); 
            System.out.println("queue = " + queue); 
            System.out.println("collection = " + list); 
        } 
    }
    输出:
    Before drainTo Operation
    queue = [aman, sudhir, harsh, rahul, raunak]
    After drainTo Operation
    queue = [rahul, raunak]
    collection = [aman, sudhir, harsh]
    

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



相关用法


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