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

Java ArrayBlockingQueue

Java ArrayBlockingQueue

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

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

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


ArrayBlockingQueue の作成

配列ブロッキング キューを作成するには、java.util.concurrent.ArrayBlockingQueue をインポートする必要があります。 パッケージ。

パッケージをインポートしたら、Java で配列ブロッキング キューを作成する方法を次に示します。

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

ここで、

たとえば、

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

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

注: 配列のサイズを指定することは必須です。


ArrayBlockingQueue のメソッド

ArrayBlockingQueue クラスは BlockingQueue のすべてのメソッドの実装を提供します

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

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

これら 2 つの方法により、アレイ ブロッキング キューが他の一般的なキューと区別されます。


要素を挿入

たとえば、

import java.util.concurrent.ArrayBlockingQueue;

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

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

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

出力

ArrayBlockingQueue: [Dog, Cat, Horse]

アクセス要素

たとえば、

import java.util.concurrent.ArrayBlockingQueue;
import java.util.Iterator;

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

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

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

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

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

出力

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

要素を削除

たとえば、

import java.util.concurrent.ArrayBlockingQueue;

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

        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("ArrayBlockingQueue: " + 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 ArrayBlockingQueue: " + animals);
    }
}

出力

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

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

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


put() メソッド

要素を配列ブロッキング キューの最後に追加するには、put() を使用できます。 メソッド。

配列ブロック キューがいっぱいの場合、配列ブロック キューに要素を追加するスペースができるまで待機します。

たとえば、

import java.util.concurrent.ArrayBlockingQueue;

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

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

出力

ArrayBlockingQueue: [Dog, Cat]

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


take() メソッド

要素を返し、配列ブロッキング キューの先頭から削除するには、take() を使用できます。 メソッド。

配列ブロック キューが空の場合、配列ブロック キューに削除する要素が存在するまで待機します。

たとえば、

import java.util.concurrent.ArrayBlockingQueue;

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

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

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

出力

ArrayBlockingQueue: [Dog, Cat]
Removed Element: Dog

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


その他の方法

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

ArrayBlockingQueue を使用する理由

ArrayBlockingQueue 内部ストレージとして配列を使用します。

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

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

ここで、最初のスレッドが 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 ベクトル