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

Java ArrayBlockingQueue:ブロッキングキューとスレッドセーフ操作の上級ガイド

Java ArrayBlockingQueue

JavaのArrayBlockingQueueを学習 - この固定サイズのブロッキングキューの作成、操作、スレッドセーフな使用法を明確な例で解説します。

JavaコレクションフレームワークのArrayBlockingQueueクラスは、配列をバックエンドとする有界でスレッドセーフなキューを提供します。BlockingQueueインターフェースを実装し、プロデューサーとコンシューマーがブロッキング操作で調整できるようにします。

Java ArrayBlockingQueue:ブロッキングキューとスレッドセーフ操作の上級ガイド


ArrayBlockingQueueの作成

java.util.concurrent.ArrayBlockingQueueをインポートし、固定容量でインスタンス化します:

ArrayBlockingQueue<Type> queue = new ArrayBlockingQueue<>(capacity);

Typeは要素型、capacityは最大サイズです。

注意:容量は必須で、キューの有界サイズを決定します。


ArrayBlockingQueueの主要メソッド

このクラスは、要素の挿入、アクセス、削除のためにBlockingQueueのすべてのメソッドを実装します。以下は最も頻繁に使用される操作です。

要素の挿入

ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);
animals.add("Dog");
animals.offer("Cat");
animals.offer("Horse");
System.out.println("ArrayBlockingQueue: " + animals);

出力: ArrayBlockingQueue: [Dog, Cat, Horse]

要素へのアクセス

String head = animals.peek();
System.out.println("ヘッド要素: " + head);
Iterator<String> it = animals.iterator();
while (it.hasNext()) {
    System.out.print(it.next() + ", ");
}

出力: ヘッド要素: Dogに続いて要素リスト

要素の削除

String removed1 = animals.remove();
String removed2 = animals.poll();
animals.clear();
System.out.println("更新後のキュー: " + animals);

出力: 更新後のキュー: []


ブロッキング操作:put()とtake()

これらのメソッドはプロデューサー・コンシューマーパターンに不可欠です。操作が実行可能になるまでブロックし、スレッド調整を保証します。

put()

要素を挿入し、キューが満杯なら待機。InterruptedExceptionをスローする可能性があります。

try {
    animals.put("Dog");
    animals.put("Cat");
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

take()

ヘッドを削除して返し、キューが空なら待機。InterruptedExceptionをスローする可能性があります。

try {
    String element = animals.take();
    System.out.println("削除された要素: " + element);
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

その他の便利なメソッド

メソッド説明
contains(Object o)指定要素がキューに含まれればtrueを返す
size()現在の要素数を返す
toArray()キューを配列に変換
toString()キューの文字列表現

なぜArrayBlockingQueueを使うのか?

以下を提供するためです:

あるスレッドがコンシューマーより遅く生産する場合、コンシューマーは自動的にブロックされ、ビジーウェイトを回避し効率的なCPU使用を保証します。

Java

  1. Java演算子をマスター:種類、構文、実践例
  2. Javaコメント:種類、使い方、ベストプラクティス
  3. Java if…elseをマスター:制御フローを徹底解説
  4. Java拡張forループをマスター:構文、例、ベストプラクティス
  5. Java文字列をマスター:生成、メソッド、ベストプラクティス
  6. Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
  7. Java無名インナークラス完全ガイド:定義、構文、実践例
  8. Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
  9. Javaアノテーション完全ガイド:種類、配置場所、実践例
  10. Javaアサーション完全ガイド:バグ早期発見とコード信頼性の向上
  11. Java Vectorの理解:使い方、特徴、ArrayListとの比較