生産者と消費者--BlockingQueue

#コード:

パブリック クラスアプリ{ 

    公共 静的 ボイドメイン(文字列[]引数){ 

        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つのコンシューマがあります。

おすすめ

転載: www.cnblogs.com/lwmp/p/11513136.html