Javaのマルチスレッド - 生産者と消費者

Javaのマルチスレッドおよび消費者問題のプロデューサー:

com.testパッケージ、
クラス、メッセージ{ 
    プライベート文字列のタイトル、
    プライベートコンテンツのString; 
    生産と消費、フラグ=真の//表現は、消費が許可されていない、生産を可能にする。フラグ=偽、生産を許可していない、消費が可能に
    プライベートブールフラグ。
    //使用すると、同期の問題を解決する一貫性のあるデータを確実SYNCHRONIZED 
    国民はSET(文字列のタイトル、文字列コンテンツ){無効同期
        IF(this.flag == trueに){//産生することができない、消費されるのを待って
            試し{ 
                )super.waitを( ; 
            }キャッチ(InterruptedExceptionあるE){ 
                e.printStackTrace(); 
            } 
        } 
        this.title =タイトル; 
        試み{ 
            のThread.sleep(100); 
        }キャッチ(InterruptedExceptionあるE){
            e.printStackTrace(); 
        } 
        this.content =コンテンツ; 
        this.flag = trueには、生産している// 
        super.notifyを(); //待機中のスレッドを覚ます
    } 
    同期GETを公共の文字列を(){ 
        IF(this.flag ==偽){//生産を待つ必要はありませいる
            トライ{ 
                super.wait(); 
            }キャッチ(InterruptedExceptionあるE){ 
                e.printStackTrace(); 
            } 
        } 
        試し{ 
            のThread.sleep(100); 
        }キャッチ(InterruptedExceptionあるE ){ 
            e.printStackTrace(); 
        } 
        試み{ 
            戻りthis.title + "=" + this.content。
        }最後に{ 
            this.flag = falseに; //継続生産
            super.notify(); //待機スレッドウェイクアップ
        } 
    } 
} 
クラスのプロデューサ実装のRunnable { 
    プライベートメッセージmsg。
    公共プロデューサ(メッセージmsg){ 
        this.msg = MSG。
    } 
    @Override 
    公共ボイドラン(){ 
        ため(int型のx = 0; X <10であり、x ++){ 
            IF(X%2 == 0){ 
                this.msg.set( "0"、 "0")。
            }他{ 
                this.msg.set( "1"、 "1")。
            } 
        } 
    } 
} 
クラスの消費者が実装のRunnable { 
    プライベートメッセージmsg。
    公共消費者(メッセージmsg){ 
        this.msg = MSG。
    } 
    公共ボイドラン(){ 
        用(INT X = 0; X <10、X ++){ 
            System.out.printlnは(this.msg.get()); 
        } 
    } 
} 
publicクラスMultithreadingDemo { 
    公共の静的な無効メイン(文字列[]引数)例外{スロー
        (;)メッセージメッセージMSG =新しい新しい
        新しい新しいスレッド(新しい新プロデューサ(MSG))を起動します。(); //プロデューサスレッド開始
        新しいスレッド(新しい消費者(MSG)を (開始));. // 開始消費者のスレッド
    } 
}

  

おすすめ

転載: www.cnblogs.com/chenduanxing/p/12637482.html