當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。