<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Java `BlockingQueue` > 原文: [https://www.programiz.com/java-programming/blockingqueue](https://www.programiz.com/java-programming/blockingqueue) #### 在本教程中,我們將學習 Java `BlockingQueue`接口及其方法。 Java `Collections`框架的`BlockingQueue`接口擴展了`Queue`接口。 它允許任何操作等待成功執行。 例如,如果我們要從空隊列中刪除元素,則阻塞隊列允許刪除操作等待,直到隊列中包含一些要刪除的元素。 * * * ## 實現`BlockingQueue`的類 由于`BlockingQueue`是一個接口,我們無法提供它的直接實現。 為了使用`BlockingQueue`的功能,我們需要使用實現它的類。 * [`ArrayBlockingQueue`](/java-programming/arrayblockingqueue "Java ArrayBlockingQueue Class") * [`LinkedBlockingQueue`](/java-programming/linkedblockingqueue "Java LinkedBlockingQueue Class") ![ArrayBlockingQueue and LinkedBlockingQueue implements the BlockingQueue interface in Java.](https://img.kancloud.cn/1b/84/1b84b8c3170926b78c5e39876e32f48b_1028x600.png) * * * ## 如何使用阻塞隊列? 為了使用`BlockingQueue`,我們必須導入`java.util.concurrent.BlockingQueue`包。 ```java // Array implementation of BlockingQueue BlockingQueue<String> animal1 = new ArraryBlockingQueue<>(); // LinkedList implementation of BlockingQueue BlockingQueue<String> animal2 = new LinkedBlockingQueue<>(); ``` 在這里,我們分別創建了類別為`ArrayBlockingQueue`和`LinkedBlockingQueue`的對象`animal1`和`animal2`。 這些對象可以使用`BlockingQueue`接口的功能。 * * * ## `BlockingQueue`的方法 根據隊列是滿還是空,阻塞隊列的方法可以分為 3 類: ### 引發異常的方法 * `add()` - 在隊列的末尾將元素插入到阻塞隊列。 如果隊列已滿,則引發異常。 * `element()` - 返回阻塞隊列的開頭。 如果隊列為空,則引發異常。 * `remove()` - 從阻塞隊列中刪除一個元素。 如果隊列為空,則引發異常。 * * * ### 返回一些值的方法 * `offer()` - 將指定的元素插入到隊列末尾的阻塞隊列中。 如果隊列已滿,則返回`false`。 * `peek()` - 返回阻塞隊列的開頭。 如果隊列為空,則返回`null`。 * `poll()` - 從阻塞隊列中刪除一個元素。 如果隊列為空,則返回`null`。 **`offer()`和`poll()`** `offer()`和`poll()`方法可以與超時一起使用。 也就是說,我們可以傳遞時間單位作為參數。 例如, ```java offer(value, 100, milliseconds) ``` 這里, * `value`是要插入隊列的元素 * 并且我們將超時設置為 100 毫秒 這意味著`offer()`方法將嘗試在`100`毫秒內將元素插入到阻塞隊列中。 如果無法在 100 毫秒內插入元素,則該方法返回`false`。 **注意**:代替`milliseconds`,我們也可以使用以下時間單位:`offer()`和`offer() poll()`方法。 * * * ### 阻塞操作的方法 `BlockingQueue`還提供了阻止操作并等待隊列已滿或為空的方法。 * `put()` - 將元素插入阻塞隊列。 如果隊列已滿,它將等待直到隊列有空間插入元素。 * `take()` - 從阻塞隊列中刪除并返回一個元素。 如果隊列為空,它將等待直到隊列中有要刪除的元素。 假設我們想將元素插入隊列。 如果隊列已滿,則`put()`方法將等待,直到隊列有空間插入元素。 同樣,如果我們要從隊列中刪除元素。 如果隊列為空,則`take()`方法將等待,直到隊列包含要刪除的元素。 * * * ## `ArrayBlockingQueue`中`BlockingQueue`的實現 ```java import java.util.concurrent.BlockingQueue; import java.util.concurrent.ArrayBlockingQueue; class Main { public static void main(String[] args) { // Create a blocking queue using the ArrayBlockingQueue BlockingQueue<Integer> numbers = new ArrayBlockingQueue<>(5); try { // Insert element to blocking queue numbers.put(2); numbers.put(1); numbers.put(3); System.out.println("BLockingQueue: " + numbers); // Remove Elements from blocking queue int removedNumber = numbers.take(); System.out.println("Removed Number: " + removedNumber); } catch(Exception e) { e.getStackTrace(); } } } ``` **輸出** ```java BlockingQueue: [2, 1, 3] Removed Element: 2 ``` 要了解有關`ArrayBlockingQueue`的更多信息,請訪問 [Java ArrayBlockingQueue](/java-programming/arrayblockingqueue "Java ArrayBlockingQueue Class") 。 * * * ## 為什么選擇`BlockingQueue`? 在 Java 中,`BlockingQueue`被視為**線程安全的**集合。 這是因為它在多線程操作中可能會有所幫助。 假設一個線程正在將元素插入隊列,而另一個線程正在從隊列中刪除元素。 現在,如果第一個線程運行速度較慢,則阻塞隊列可使第二個線程等待,直到第一個線程完成其操作。
                  <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>

                              哎呀哎呀视频在线观看