#コード:
パブリック クラスアプリ{ 公共 静的 ボイドメイン(文字列[]引数){ BlockingQueueの <整数>キュー= 新しい ArrayBlockingQueue <>(6 )。 プロデューサープロデューサー = 新しいプロデューサー(キュー)。 消費者の消費者 = 新しい消費者(キュー)。 producer.produce( 5 )。 consumer.consume( 4 )。 producer.produce( 3 )。 consumer.consume( 2 )。 } } クラスプロデューサー{ プライベートBlockingQueueの<整数> キュー。 公共プロデューサ(BlockingQueueの<整数> キュー){ この .queue = キュー。 } 公共 ボイド生産(最終 int型のval){ 新しいスレッド(){ 公共 ボイドラン(){ しようと{ int型黒字= ヴァル; 一方、(余剰> 0 ){ queue.put( 1024 )。 黒字 - ; System.out.printf( "(%のD)を生成する%の計画、実際に(%d)は、キューサイズ(%D)\ nを生成する" 、 にThread.currentThread()のgetName()、ヴァル、 1 、キュー。サイズ()); } } キャッチ(InterruptedExceptionある電子){ e.printStackTrace(); } } } .start(); } } クラスの消費者{ プライベートのBlockingQueue <整数> キュー。 公共の消費者(BlockingQueueの<整数> キュー){ この .queue = キュー; } 公共 ボイドが消費する(最終 int型のval){ 新しいスレッド(){ 公共 ボイドラン(){ int型の余剰= ヴァル。 試す{ ながら(余剰> 0 ){ queue.take()。 黒字 - ; System.out.printf( "(%のd)を消費する%の計画、実際に(%d)は、キューサイズ(%D)\ nを消費する" 、 にThread.currentThread()のgetName()、ヴァル、 1 、キュー。サイズ()); } } キャッチ(InterruptedExceptionある電子){ e.printStackTrace(); } } } .start(); } }
#出力:
生成するスレッド0計画(5)、実際に(1)、キューサイズ(1)製造
(2)を消費するスレッド3計画を、実際に(1)、キューサイズを消費する(0)を
生成するスレッド2プラン(3 )、実際に(1)(1)、キューサイズを生成
スレッド1プランを消費する(4)、実際に(1)、キューサイズを消費する(0)
、(3)、実際に(1)を製造製造するスレッド2プランをキューサイズは、(1)
消費するスレッド3計画(2)、実際に(1)、キューサイズを消費する(0)を
生成するスレッド0計画(5)、実際に(1)、キューサイズを生成(1)
スレッド2計画(3)は、実際に製造製造する(1)、キューサイズ(1)
スレッド1プランは、消費(4)、実際に(1)、キューサイズ(0)を消費
スレッド0計画は、実際には、(5)を生成します(2)(1)、キューサイズを生成します
(4)消費するスレッド-1プラン、実際に(1)、キューサイズを消費する(1)〜
(4)を消費するスレッド-1プラン、実際に(1)、キューサイズを消費する(1)
生成するスレッド0計画(5 )、実際に(1)、キューサイズ(2)製造
(2)(5)、実際に(1)、キューサイズを生成生成するスレッド0プラン
#プロセスに関与する4つのスレッド、2つの生産、2つのコンシューマがあります。