クラシックマルチスレッドの問題 - 生産者と消費者

/ ** 
 * @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(); 
    } 
}

 

おすすめ

転載: www.cnblogs.com/helloworldmybokeyuan/p/11714948.html