生産者と消費者問題

パブリック クラス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)。
        } 
    } 
    
}

 

おすすめ

転載: www.cnblogs.com/yxfyg/p/12424692.html