<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Java `ArrayBlockingQueue`類 > 原文: [https://howtodoinjava.com/java/collections/java-arrayblockingqueue/](https://howtodoinjava.com/java/collections/java-arrayblockingqueue/) `ArrayBlockingQueue`類是由數組支持的 Java **并發**和**有界**阻塞隊列實現。 它對元素 FIFO(先進先出)進行排序。 `ArrayBlockingQueue`的**頭部**是已在隊列中最長時間的元素。 `ArrayBlockingQueue`的**尾部**是已在隊列中最短時間的元素。 將新的**元素插入到隊列的末尾**,并且隊列**檢索操作將在隊列的頭**獲得元素。 ## 1\. `ArrayBlockingQueue`特性 讓我們記下`ArrayBlockingQueue`類的幾個要點。 * `ArrayBlockingQueue`是由數組支持的固定大小的有界隊列。 * 它對元素 FIFO(先進先出)進行排序。 * 元素插入到尾部,并從隊列的開頭檢索。 * 創建后,隊列的容量無法更改。 * 它提供**阻塞插入和檢索操作**。 * 它不允許使用`NULL`對象。 * `ArrayBlockingQueue`是**線程安全的**。 * 方法`iterator()`中提供的`Iterator`從第一個(頭)到最后一個(尾)順序遍歷元素。 * `ArrayBlockingQueue`支持可選的**公平性策略**,用于順序等待的生產者線程和使用者線程。 公平設置為`true`時,隊列以 FIFO 順序授予線程訪問權限。 ## 2\. Java `ArrayBlockingQueue`示例 #### 2.1 `ArrayBlockingQueue`阻塞插入和檢索示例 使用阻塞插入和檢索從`ArrayBlockingQueue`中放入和取出元素的 Java 示例。 * 當隊列已滿時,生產者線程將等待。 一旦從隊列中取出一個元素,它就會將該元素添加到隊列中。 * 如果隊列為空,使用者線程將等待。 隊列中只有一個元素時,它將取出該元素。 Java 數組阻塞隊列生產者使用者示例。 ```java import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.TimeUnit; public class ArrayBlockingQueueExample { public static void main(String[] args) throws InterruptedException { ArrayBlockingQueue<Integer> priorityBlockingQueue = new ArrayBlockingQueue<>(5); //Producer thread new Thread(() -> { int i = 0; try { while (true) { priorityBlockingQueue.put(++i); System.out.println("Added : " + i); Thread.sleep(TimeUnit.SECONDS.toMillis(1)); } } catch (InterruptedException e) { e.printStackTrace(); } }).start(); //Consumer thread new Thread(() -> { try { while (true) { Integer poll = priorityBlockingQueue.take(); System.out.println("Polled : " + poll); Thread.sleep(TimeUnit.SECONDS.toMillis(2)); } } catch (InterruptedException e) { e.printStackTrace(); } }).start(); } } ``` 程序輸出。 ```java Added : 1 Polled : 1 Added : 2 Polled : 2 Added : 3 Added : 4 Polled : 3 Added : 5 Added : 6 Polled : 4 Added : 7 Added : 8 Polled : 5 Added : 9 ``` ## 3\. Java `ArrayBlockingQueue`構造器 `ArrayBlockingQueue`類提供了 3 種不同的方法來用 Java 構造隊列。 * **`ArrayBlockingQueue(int Capacity)`**:構造具有給定(固定)容量和默認訪問策略的空隊列。 * **`ArrayBlockingQueue(int capacity, boolean fair)`**:構造具有給定(固定)容量和指定訪問策略的空隊列。 如果公允值為`true`,則按 FIFO 順序處理對在插入或拔出時阻塞的線程的隊列訪問; 如果為`false`,則未指定訪問順序。 * **`ArrayBlockingQueue(int capacity, boolean fair, Collection c)`**:構造一個具有給定(固定)容量,指定訪問策略并最初包含給定集合元素的隊列,并按集合的遍歷順序添加迭代器。 ## 4\. Java `ArrayBlockingQueue`方法 您應該知道`ArrayBlockingQueue`類具有以下給定的重要方法。 * **`void put(Object o)`**:將指定的元素插入此隊列的尾部,如果隊列已滿,則等待空間變為可用。 * **`boolean add(object)`**:如果可以在不超出隊列容量的情況下立即執行此操作,則在此隊列的末尾插入指定的元素,如果隊列已滿,則返回`true`,并拋出`IllegalStateException`。 * **`boolean offer(object)`**:如果可以在不超過隊列容量的情況下立即執行此操作,則在此隊列的末尾插入指定的元素,如果隊列已滿,則返回`true`,并拋出`IllegalStateException`。 * **`boolean remove(object)`**:從此隊列中移除指定元素的單個實例(如果存在)。 * **`Object peek()`**:檢索但不刪除此隊列的頭,如果此隊列為空,則返回`null`。 * **`Object poll()`**:檢索并刪除此隊列的頭部,如果此隊列為空,則返回`null`。 * **`Object poll(timeout, timeUnit)`**:檢索并刪除此隊列的開頭,并在必要時等待指定的等待時間以使元素可用。 * **`Object take()`**:檢索并刪除此隊列的頭,如有必要,請等待直到元素可用。 * **`void clear()`**:從此隊列中刪除所有元素。 * **`boolean contains(Object o)`**:如果此隊列包含指定的元素,則返回`true`。 * **`Iterator iterator()`**:按適當的順序返回此隊列中元素的迭代器。 * **`int size()`**:返回此隊列中的元素數。 * **`intrainToTo(Collection c)`**:從此隊列中刪除所有可用元素,并將它們添加到給定的集合中。 * **`intrainTo(Collection c, int maxElements)`**:從此隊列中最多移除給定數量的可用元素,并將其添加到給定的集合中。 * **`int remainingCapacity()`**:返回此隊列理想情況下(在沒有內存或資源約束的情況下)可以接受而不阻塞的其他元素的數量。 * **`Object[] toArray()`**:按正確的順序返回包含此隊列中所有元素的數組。 ## 5\. 總結 在此 **Java `ArrayBlockingQueue`教程**中,我們學習了使用`ArrayBlockingQueue`類,該類能夠將元素存儲在固定大小的**并發阻塞隊列中**。 我們還學習了`ArrayBlockingQueue`類的一些重要方法和[構造器](https://howtodoinjava.com/oops/java-constructors/)。 將我的問題放在評論部分。 學習愉快! 參考文獻: [`ArrayBlockingQueue`類 Java 文檔](https://docs.oracle.com/javase/8/docs/api/java/util/ArrayBlockingQueue.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看