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)を (開始));. // 開始消費者のスレッド } }