/ ** * @ClassName Question09 * @description:经典生产者消费者问题 * @Author xtanb * @Date 2019年10月21日 * @VersionのV1.0 * * / パブリック クラスQuestion09 { クラスCubbyHole { プライベート int型の配列。 プライベート ブールできる= 偽; 国民は 、同期 のint (){を取得 しながら(!できる){ しようと{ )(待機を。 } キャッチ(例外e){ e.printStackTrace(); } } できる = 偽。 通知()。 戻り値の配列。 } 公共 同期 ボイドプット(int型の値){ ながら(こと){ しようと{ )(待機を。 } キャッチ(例外e){ e.printStackTrace(); } } SEQ = 値。 できる = 真; 通知()。 } } クラスプロデューサー延びスレッド{ プライベートCubbyHole cubbyHoleと、 プライベート int型の数。 公共プロデューサ(CubbyHoleのC、INTの数){ cubbyHole = C。 この .NUMBER = 数; } 公共 ボイドラン(){ ため(int型、iは10 <; I = 0 iは++ ){ cubbyHole.put(i)を、 System.out.println( "Productor" +番号+ + "置く" I); 試します{ 睡眠((INT)Math.random()* 100 )。 } キャッチ(例外e){ e.printStackTrace(); } } } } クラスの消費者は延びスレッド{ プライベートCubbyHole cubbyHoleと、 プライベート int型の数。 公共の消費者(CubbyHole cubbyHole、int型の数){ スーパー(); この .cubbyHole = cubbyHole。 この .NUMBER =数; } 公共 ボイドラン(){ int型値= 0 。 以下のために(int型 i = 0; iが10 <; I ++ ){ 値 = cubbyHole.get()。 System.out.println( "顧客" +番号+ "GET" + 値)。 } } } パブリック 静的 ボイドメイン(文字列[]引数){ CubbyHole cubbyHole = 新しい Question09()。新しいCubbyHole(); プロデューサーP1 = 新しい Question09()。新しいプロデューサー(cubbyHole、1 ); 消費者C1 = 新しい Question09()。新しい消費者(cubbyHole、1 ); p1.start(); c1.start(); } }