Java のブロッキング キューは、プロデューサー/コンシューマー モデルを実装するために使用されます。プロデューサー スレッドはデータをキューに追加し、コンシューマー スレッドはキューからデータを読み取ります。キューがいっぱいの場合、プロデューサーはスペースが使用可能になるまでブロックし、キューが空の場合、コンシューマーはデータを読み取ることができるまでブロックします。実際のケース: キャッシュ システム、メッセージ キュー、パイプライン処理などの同時実行性の問題。
ブロッキング キューを使用して Java でプロデューサー/コンシューマー モデルを実装する
ブロッキング キューはスレッド セーフなデータ構造です。これは、プロデューサーとコンシューマー間の同期を実現するのに役立ちます。プロデューサ スレッドはキューにデータを追加し、コンシューマ スレッドはキューからデータを読み取ります。キューがいっぱいの場合、プロデューサーはスペースが使用可能になるまでブロックします。キューが空の場合、コンシューマはデータが読み取れるようになるまでブロックされます。
サンプル コード:
Producer.java
import java.util.concurrent.BlockingQueue; public class Producer implements Runnable { private BlockingQueue<Integer> queue; public Producer(BlockingQueue<Integer> queue) { this.queue = queue; } @Override public void run() { for (int i = 0; i < 10; i++) { try { queue.put(i); System.out.println("Produced: " + i); } catch (InterruptedException e) { e.printStackTrace(); } } } }
Consumer.java
import java.util.concurrent.BlockingQueue; public class Consumer implements Runnable { private BlockingQueue<Integer> queue; public Consumer(BlockingQueue<Integer> queue) { this.queue = queue; } @Override public void run() { while (true) { try { Integer item = queue.take(); System.out.println("Consumed: " + item); } catch (InterruptedException e) { e.printStackTrace(); } } } }
Main.java
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Main { public static void main(String[] args) { BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(10); Producer producer = new Producer(queue); Consumer consumer = new Consumer(queue); ExecutorService executorService = Executors.newFixedThreadPool(2); executorService.submit(producer); executorService.submit(consumer); executorService.shutdown(); } }
実際のケース:
このモデルは、次のようなさまざまな同時実行の問題を解決するために使用できます。
以上がJavaでブロッキングキューを使用してプロデューサー/コンシューマーモデルを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。