偉大な神への回答を求めている生産者と消費者、

今日、彼は運動の単一生産者と消費者、データ消費データの生産に問題がない、生産者 - 消費者モデルを書きました。

消費者が時間を追加する場合でも、生産者は負の製品を生産します出てきた製品が<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)))(開始。
	} 

}

  

 

おすすめ

転載: www.cnblogs.com/hack9527/p/11706506.html