今日、彼は運動の単一生産者と消費者、データ消費データの生産に問題がない、生産者 - 消費者モデルを書きました。
消費者が時間を追加する場合でも、生産者は負の製品を生産します出てきた製品が<0のとき、私の判断は、であり、消費者がブロックされているが、
まだ負の製品を生産、成功していないようでした。
質問に答える大きな神を追求。
次のコードが掲載されています
パッケージThread_p_c; パブリッククラスプロデューサーはRunnableを実装して、{ プライベート製品Pを、 公共の生産(製品P){ this.p = P。 } @Override ます。public void実行(){ ながら、(真){ 同期(P){ 場合{(p.isFlag()!) してみてください{ p.wait(); }キャッチ(InterruptedExceptionある電子){ // TODO自動生成キャッチブロック e.printStackTrace(); } } のSystem.out.println( "生产者开始制造产品:")。 int型I = p.getPno(); I ++; p.setPno(I); p.setFlag(偽); System.out.println( "生产者生产了" + p.getPname()+ " - "" + p.getPno())。 System.out.println( "生産の生産を終了、消費待ち!"); P.notify(); } } } }
Thread_p_cパッケージ; パブリッククラスコンシューマ実装のRunnable { プライベート製品P、 公共消費(製品P){ this.p = P; } @Override 公共ボイドRUN(){ (真の)一方{ 同期(P){ IF(p.isFlag ()|| p.getPno()<= 0){ 試み{ p.wait(); }キャッチ(InterruptedExceptionあるE){ // TODO自動生成されたブロックキャッチ e.printStackTrace(); } } のSystem.out.println ( "消費者の買い物に消費者"); System.out.printlnは( "消費者が消費者向け製品です:"); System.out.printlnは( "における個人消費......."); 私はint型= p.getPno(); System.out.println( "最終消費支出の消費" + p.getPname()+ ":" + p.getPno()); i--; p.setPno(I); (真の)p.setFlag ; p.notify(); のSystem.out.println( "消費者側は、...製造するメーカーに通知することです"); } } } }
パッケージThread_p_c; パブリッククラス製品{ プライベートint型PNO = 0; 公共製品(文字列PNAME){ this.pname = PNAME。 } プライベート文字列のpname = "灯泡"。 プライベートブールフラグ=真; パブリックブールisFlag(){ 戻りフラグ。 } 公共ボイドSETFLAG(ブーリアンフラグ){ this.flag =フラグ。 } 公共INT getPno(){ 戻りPNO。 } 公共ボイドsetPno(INT PNO){ this.pno = PNO。 } パブリック文字列getPname(){ 戻りPNAME。 } 公共ボイドsetPname(文字列PNAME){ this.pname = PNAME。 } }
パッケージThread_p_c; パブリッククラスpc_model { プライベートint型私= 0; プライベートブールフラグ=真; パブリック静的無効メイン(文字列[] args){ 積P =新製品( "灯泡")。 スレッドT1 =新しいスレッド(新しいプロデューサー(P)); スレッドT2 =新しいスレッド(新しい消費者(P)); t1.start(); t2.start(); //新しいスレッド(新しいプロデューサー(P)))(開始。 //新しいスレッド(新しい消費者(P)))(開始。 } }