パブリック クラスProducerConsumer { 公共 静的 ボイドメイン(文字列[]引数){ SyncStackのSS = 新しいSyncStack()。 プロデューサーのp = 新しいプロデューサー(SS); 消費者Cは = 新しい消費者(SS)を、 スレッドT1は = 新しいスレッド(p)を。 スレッドT2は = 新しいスレッド(c)を、 t1.start(); t2.start(); } } クラスWoTou { int型のID。 WoTou(int型のID){ この .ID = ID。 } パブリック文字列のtoString(){ リターン "WoTou:" + ID。 } } クラスSyncStack { int型のインデックス= 0 。 WoTou [] arrayWT = 新しい WoTou [8 ]。 公共 同期 ボイドプッシュ(WoTou重量){ 一方(インデックス== arrayWT.length){ 試み{ この.WAIT()。 } キャッチ(InterruptedExceptionある電子){ e.printStackTrace(); } } この.notify()。 arrayWT [インデックス] = 重量%; インデックス ++ ; } パブリック 同期WoTouポップ(){ 一方(インデックス== 0 ){ 試み{ この.WAIT()。 } キャッチ(InterruptedExceptionある電子){ e.printStackTrace(); } } この.notify()。 インデックス - ; リターンarrayWT [インデックス]。 } } クラスのプロデューサーが実装実行可能{ SyncStackのSS = NULL ; プロデューサ(SyncStackのSS){ この .SS = SS。 } 公共 ボイドラン(){ ため(INT iが= 0; I <20; I ++ ){ WoTou重量 = 新しいWoTou(I)。 ss.push(重量) System.out.println( "生产了" + WT)。 } } } クラスの消費者実装のRunnable { SyncStack SS = NULL ; 消費者(SyncStackのSS){ この .SS = SS。 } 公共 ボイド(){ラン のために(intは ; I <20 I ++ iが0 = {) WoTou重量 = ss.pop()。 System.out.println( "消费了" + WT)。 } } }