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

Java LinkedBlockingQueue

Java LinkedBlockingQueue

このチュートリアルでは、例を使用して LinkedBLockingQueue クラスとそのメソッドについて学習します。

LinkedBlockingQueue Java Collections のクラス フレームワークは、リンク リストを使用してブロッキング キューの実装を提供します。

Java BlockingQueue インターフェイスを実装します。


LinkedBlockingQueue の作成

リンクされたブロッキング キューを作成するには、java.util.concurrent.LinkedBlockingQueue をインポートする必要があります。 パッケージ。

Java でリンクされたブロッキング キューを作成する方法は次のとおりです。

<強い>1.初期容量なし

LinkedBlockingQueue<Type> animal = new LinkedBlockingQueue<>();

ここで、デフォルトの初期容量は 2 31 になります -1.

<強い>2.初期容量で

LinkedBlockingQueue<Type> animal = new LinkedBlockingQueue<>(int capacity);

ここで、

たとえば、

// Creating String type LinkedBlockingQueue with size 5
LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);

// Creating Integer type LinkedBlockingQueue with size 5
LinkedBlockingQueue<Integer> age = new LinkedBlockingQueue<>(5);

注: リンク リストのサイズを指定することは必須ではありません。


LinkedBlockingQueue のメソッド

LinkedBlockingQueue クラスは、BlockingQueue インターフェイスのすべてのメソッドの実装を提供します。

これらのメソッドは、リンクされたブロッキング キューから要素を挿入、アクセス、および削除するために使用されます。

また、2 つの方法 put() についても学びます。 および take() リンクされたブロッキング キューでのブロッキング操作をサポートするもの。

これら 2 つの方法は、リンクされたブロッキング キューを他の典型的なキューと区別します。


要素を挿入

たとえば、

import java.util.concurrent.LinkedBlockingQueue;

class Main {
    public static void main(String[] args) {
        LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);

        // Using add()
        animals.add("Dog");
        animals.add("Cat");

        // Using offer()
        animals.offer("Horse");
        System.out.println("LinkedBlockingQueue: " + animals);
    }
}

出力

LinkedBlockingQueue: [Dog, Cat, Horse]

アクセス要素

たとえば、

import java.util.concurrent.LinkedBlockingQueue;
import java.util.Iterator;

class Main {
    public static void main(String[] args) {
        LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);

        // Add elements
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("LinkedBlockingQueue: " + animals);

        // Using peek()
        String element = animals.peek();
        System.out.println("Accessed Element: " + element);

        // Using iterator()
        Iterator<String> iterate = animals.iterator();
        System.out.print("LinkedBlockingQueue Elements: ");

        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

出力

LinkedBlockingQueue: [Dog, Cat, Horse]
Accessed Element: Dog
LinkedBlockingQueue Elements: Dog, Cat, Horse,

要素を削除

たとえば、

import java.util.concurrent.LinkedBlockingQueue;

class Main {
    public static void main(String[] args) {
        LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);

        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("LinkedBlockingQueue " + animals);

        // Using remove()
        String element1 = animals.remove();
        System.out.println("Removed Element:");
        System.out.println("Using remove(): " + element1);

        // Using poll()
        String element2 = animals.poll();
        System.out.println("Using poll(): " + element2);

        // Using clear()
        animals.clear();
        System.out.println("Updated LinkedBlockingQueue " + animals);
    }
}

出力

LinkedBlockingQueue: [Dog, Cat, Horse]
Removed Elements:
Using remove(): Dog
Using poll(): Cat
Updated LinkedBlockingQueue: []

put() および take() メソッド

マルチスレッド プロセスでは、put() を使用できます。 と take() あるスレッドの操作をブロックして、別のスレッドと同期します。これらのメソッドは、正常に実行されるまで待機します。


put() メソッド

指定された要素をリンクされたブロッキング キューの最後に挿入するには、put() を使用します。 メソッド。

リンクされたブロッキング キューがいっぱいの場合、リンクされたブロッキング キューに要素を挿入するスペースができるまで待機します。

たとえば、

import java.util.concurrent.LinkedBlockingQueue;

class Main {
    public static void main(String[] args) {
        LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);

       try {
        // Add elements to animals
           animals.put("Dog");
           animals.put("Cat");
           System.out.println("LinkedBlockingQueue: " + animals);
        }
        catch(Exception e) {
            System.out.println(e);
        }
    }
}

出力

LinkedBlockingQueue: [Dog, Cat]

ここでは、put() メソッドは InterruptedException をスローする可能性があります 待機中に中断された場合。したがって、それを try..catch ブロック内で囲む必要があります。


take() メソッド

リンクされたブロッキング キューの先頭から要素を取得して削除するには、take() を使用できます。 メソッド。

リンクされたブロッキング キューが空の場合、リンクされたブロッキング キューに要素が削除されるまで待機します。

たとえば、

import java.util.concurrent.LinkedBlockingQueue;

class Main {
    public static void main(String[] args) {
        LinkedBlockingQueue<String> animals = new LinkedBlockingQueue<>(5);

       try {
           //Add elements to animals
           animals.put("Dog");
           animals.put("Cat");
           System.out.println("LinkedBlockingQueue: " + animals);

           // Remove an element
           String element = animals.take();
           System.out.println("Removed Element: " + element);
           System.out.println("New LinkedBlockingQueue: " + animals);
        }
        catch(Exception e) {
            System.out.println(e);
        }
    }
}

出力

LinkedBlockingQueue: [Dog, Cat]
Removed Element: Dog
New LinkedBlockingQueue: [Cat]

ここでは、take() メソッドは InterrupedException をスローします 待機中に中断された場合。したがって、try...catch で囲む必要があります。 ブロックします。


その他の方法

メソッド 説明
contains(element) 指定された要素のリンクされたブロッキング キューを検索します。要素が見つかった場合、true を返します 、そうでない場合は false を返します .
size() リンクされたブロッキング キューの長さを返します。
toArray() リンクされたブロッキング キューを配列に変換し、その配列を返します。
toString() リンクされたブロッキング キューを文字列に変換します

LinkedBlockingQueue を使用する理由

LinkedBlockingQueue リンクされたリストを内部ストレージとして使用します。

スレッドセーフと見なされます コレクション。そのため、通常はマルチスレッド アプリケーションで使用されます。

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

ここで、最初のスレッドが 2 番目のスレッドより遅い場合、リンクされたブロッキング キューにより、最初のスレッドが操作を完了するまで 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 ベクトル