工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java ブロッキング キュー

Java BlockingQueue

このチュートリアルでは、Java BlockingQueue インターフェイスとそのメソッドについて学習します。

BlockingQueue Java Collections のインターフェース フレームワークは Queue を拡張します インターフェース。正常に実行されるまで、すべての操作を待機させることができます。

たとえば、空のキューから要素を削除する場合、ブロッキング キューを使用すると、削除する要素がキューに含まれるまで削除操作を待機できます。


BlockingQueue を実装するクラス

BlockingQueue以降 はインターフェイスであるため、直接実装することはできません。

BlockingQueue の機能を使用するには 、それを実装するクラスを使用する必要があります。


ブロッキング キューの使用方法

java.util.concurrent.BlockingQueue をインポートする必要があります BlockingQueue を使用するためのパッケージ .

// Array implementation of BlockingQueue
BlockingQueue<String> animal1 = new ArraryBlockingQueue<>();

// LinkedList implementation of BlockingQueue
BlockingQueue<String> animal2 = new LinkedBlockingQueue<>();

ここでは、オブジェクト animal1 を作成しました と animal2 クラス ArrayBlockingQueue の および LinkedBlockingQueue 、 それぞれ。これらのオブジェクトは BlockingQueue の機能を使用できます


BlockingQueue のメソッド

キューが満杯か空かによって、ブロッキング キューのメソッドは次の 3 つのカテゴリに分けられます。

例外をスローするメソッド


何らかの値を返すメソッド

offer() と poll() の詳細

offer() および poll() メソッドはタイムアウトで使用できます。つまり、時間単位をパラメーターとして渡すことができます。たとえば、

offer(value, 100, milliseconds)

ここで、

これは offer() を意味します メソッドは 100 のブロッキング キューに要素を挿入しようとします。 ミリ秒。要素を 100 ミリ秒以内に挿入できない場合、メソッドは false を返します。 .

注: milliseconds の代わりに 、これらの時間単位も使用できます:dayshoursminutessecondsmicrosecondsnanoseconds offer() で と poll() メソッド。


操作をブロックするメソッド

BlockingQueue また、操作をブロックし、キューが満杯または空の場合に待機するメソッドも提供します。

要素をキューに挿入したいとします。キューがいっぱいの場合、put() メソッドは、キューに要素を挿入するスペースができるまで待機します。

同様に、キューから要素を削除したい場合。キューが空の場合、take() メソッドは、削除する要素がキューに含まれるまで待機します。


ArrayBlockingQueue での BlockingQueue の実装

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();
      }
    }
}

出力

BlockingQueue: [2, 1, 3]
Removed Element: 2

ArrayBlockingQueue について詳しく知るには 、Java ArrayBlockingQueue にアクセスしてください。


BlockingQueue を使用する理由

Java では、BlockingQueue スレッドセーフと見なされます コレクション。これは、マルチスレッド操作に役立つ可能性があるためです。

あるスレッドが要素をキューに挿入し、別のスレッドが要素をキューから削除しているとします。

ここで、最初のスレッドの実行速度が遅い場合、ブロッキング キューにより、最初のスレッドが操作を完了するまで 2 番目のスレッドを待機させることができます。


Java

  1. Java オペレーター
  2. Java コメント
  3. Java if...else ステートメント
  4. Java for-each ループ
  5. Java 文字列
  6. Java インターフェイス
  7. Java匿名クラス
  8. Java try-with-resources
  9. Java アノテーション
  10. Java アサーション
  11. Java ベクトル