以下のためのパッケージ変更com.ring2.test; / ** *銃の定義はわずか20の弾丸を充填することができる 数は、生産を停止する20箇条書き、銃弾の生産よりも大きい場合に起こされるのを待って、* 弾丸が0に等しい場合*、消費弾丸を撮影停止するように、起こされるのを待っている * * / パブリック クラスガン{ プライベート 静的 int型の弾丸= 0 ; プライベート 静的 int型 maxBullet = 20 ; プライベート 静的「と同じ、オブジェクトの」文字列=ロック; 静的 クラスのプロバイダ実装のRunnable { @Override 公共 のボイドRUN(){ 用(INT0 = I、I 20は、<; I ++は){ 試み{ のThread.sleep( 1000年); } キャッチ(InterruptedExceptionあるE){ e.printStackTrace(); } 同期(ロック){ IF(弾丸== maxBullet){ 試み{ ロック.WAIT(); のSystem.out.println( "フルボア、ローディングは通知を待って、停止している。" ); } キャッチ(InterruptedExceptionあるE){ e.printStackTrace(); } } 弾丸 ++ ; のSystem.out.println(にThread.currentThread()のgetName() + "完了装填、カートリッジの現在の数は、" + 弾丸); Lock.notifyAll(); } } } } 静的 クラス消費者実装のRunnable { @Override 公共 ボイドRUN(){ のために(int型 I = 0;私は20を<することであり、私は++ ){ 試み{ のThread.sleep( 1000); }。キャッチ(InterruptedExceptionある電子){ e.printStackTrace(); } 同期(ロック){ 場合(弾丸== 0 ){ 試みる{ )(Lock.waitします。 System.out.println( "子弹数量为空、等待装子弹。" ); } キャッチ(InterruptedExceptionある電子){ e.printStackTrace(); } } 弾丸 - 。のSystem.out.println(にThread.currentThread()のgetName() + "ワンショットが完了すると、カートリッジの現在の数は、" + 弾丸); Lock.notifyAll(); } } } } パブリック 静的 ボイドメイン(文字列[]引数){ System.out.printlnは( "スレッド開始" )、 新しい新しいスレッド(新しい新しいプロバイダ())開始(); 新しい新しいスレッド(新しい新しい消費者())開始();. } }
結果:
スレッドに開始 スレッドを -0読み込みが完了すると、弾丸の現在の数は次のとおりです。1 スレッド -1ショットを完了し、弾丸の現在の数がある:0 スレッド -0読み込みが完了すると、弾丸の現在の数は次のとおりです。1つの スレッド -1ショットを完了し、カートリッジの現在の数である:0 スレッド -0ローディングを完了し、カートリッジの現在の数は、1つの カートリッジの数は、ローディング弾を待って、空です。 スレッド -1ワンショットの完了は、カートリッジの現在の数:0 スレッド -0ローディングを完了し、カートリッジの現在の数が:. 1 スレッド -1カートリッジの現在の数に1つのショットの完了:0 スレッド -0ロード現在の弾丸を完了します:. 1の量 スレッド -1ワンショットの完了は、カートリッジの現在の数:0 スレッド -0ローディングを完了し、カートリッジの現在の数が:. 1 スレッド -1カートリッジの現在の数に1つのショットの完了:0 スレッド -0パッケージを完成しますシェル、カートリッジの現在の数:1 スレッド -1ワンショットが完了すると、カートリッジの現在の数:0 スレッド -0ローディングを完了し、カートリッジの現在の数は、1つの カートリッジの数は、ローディング弾を待って、空です。 スレッド-1ワンショットの完了は、カートリッジの現在の数:0 スレッド -0ローディングを完了し、カートリッジの現在の数が:. 1 スレッド -1カートリッジの現在の数に1つのショットの完了:0 スレッド -0ローディングを完了し、カートリッジの現在の数:. 1は スレッド -1カートリッジの現在の数に1つのショットの完了:0 スレッド -0ローディングを完了し、カートリッジの現在の数が:. 1 スレッド -1カートリッジの現在の数に1つのショットの完了:0 スレッド -0ローディングを完了します弾丸の現在の数:1つの カートリッジの数がローディング弾を待って、空です。 スレッド -1ワンショットの完了は、カートリッジの現在の数:0 スレッド -0ローディングを完了し、カートリッジの現在の数が:. 1 スレッド -1カートリッジの現在の数に1つのショットの完了:0 スレッド -0ロード現在の弾丸を完了します:. 1の量 スレッド -1ワンショットの完了は、カートリッジの現在の数:0 スレッド -0ローディングを完了し、カートリッジの現在の数が:. 1 スレッド -1カートリッジの現在の数に1つのショットの完了:0 スレッド -0パッケージを完成しますシェルは、カートリッジの現在の数として1 :. スレッド-1ワンショットの完了は、カートリッジの現在の数:0 スレッド -0ローディングを完了し、カートリッジの現在の数は、1つの カートリッジの数は、ローディング弾を待って、空です。 スレッド -1ワンショットの完了は、カートリッジの現在の数:0 スレッド -0ローディングを完了し、カートリッジの現在の数が:. 1 スレッド -1カートリッジの現在の数に1つのショットの完了:0 スレッド -0ロード現在の弾丸を完了します:. 1の量 スレッド -1カートリッジの現在の数に1つのショットの完了:0 スレッド -0ローディングを完了し、カートリッジの現在の数が:. 1 スレッド -1カートリッジの現在の数に1つのショットの完了:0