マルチスレッドとマルチプロデューサー、より多くの消費者とは、信号を待ちます

パッケージテスト。

輸入java.awt.List; 
輸入java.awt.image.AreaAveragingScaleFilter。
輸入java.lang.reflect.Array。
インポートのjava.math.BigDecimal; 
インポートがjava.math.BigInteger; 
輸入java.utilの。*; 
輸入java.util.concurrent.CountDownLatch。
輸入java.util.concurrent.locks.Condition。
輸入java.util.concurrent.locks.Lock。
輸入java.util.concurrent.locks.ReentrantLock。
輸入java.io.BufferedInputStreamの。
輸入java.io.OutputStreamWriterが、
輸入てjava.io.PrintWriter; 
インポートするjava.io.Reader; 
インポートのjava.io.Writer; 
輸入javax.security.auth.callback.LanguageCallback; 
輸入javax.swing.text.StyledEditorKit.BoldAction。

クラスのリソース教材{ 
	プライベート文字列名; 
	プライベートブールフラグ= falseは、
	プライベートint型の数; 
	ロックロック=新しいReentrantLockの(); 
	条件proCondition = lock.newCondition()。
	条件条件= lock.newCondition()。

	公共ボイドプット(文字列名){ 
		lock.lock(); 
		{試みる
			一方(フラグ){ 
				{試みる
					)(proCondition.awaitします。
				}キャッチ(InterruptedExceptionある電子){ 
					e.printStackTrace(); 
				} 
			} 

			フラグ= TRUE。
			++数えます。
			this.name =名+数えます。
			condition.signal(); 
		}最後に{ 
			lock.unlock()。
		} 
	}

	公共ボイドテイク(){ 
		lock.lock(); 
		してみてください{ 
			(フラグ!){ながら
				{みてください
					)(condition.await。
				}キャッチ(InterruptedExceptionある電子){ 
					e.printStackTrace(); 
				} 
			} 
			フラグ= FALSE。
			System.out.println(にThread.currentThread()のgetName()+ "......" + this.name)。
			proCondition.signal(); 
		}最後に{ 
			lock.unlock()。
		} 
	} 
} 

クラスプロデューサーRunnableを{実装
	リソース教材Rと、

	プロデューサ(リソース教材のR){ 
		this.r = R。
	} 

	@Override 
	公共ボイドラン(){ 
		一方(TRUE){  
			r.put( "烤鸭")。
		} 
	}
 
} 

クラスの消費者は、Runnableを実装{ 
	リソース教材Rと、

	消費者(リソース教材のR){ 
		this.r = R。
	} 

	@Override 
	公共ボイドラン(){ 
		一方(真)
			r.take(); 
	} 

} 

publicクラスメイン{ 

	公共の静的な無効メイン(文字列[]引数)は例外{スロー

		スキャナスキャナ=新しいスキャナ(新しいにBufferedInputStream(System.in))を、
		PrintWriterのうち=新しいPrintWriter(新しいのOutputStreamWriter(のSystem.out)); 
		
		リソース教材のR =新しいリソース教材()。
		プロデューサA =新たなプロデューサ(R)
		プロデューサB =新プロデューサ(R)
		消費者C =新しい消費者(R)
		消費者D =新しいコンシューマー(R);
		
		スレッドT1 =新しいスレッド(A)。
		スレッドT2 =新しいスレッド(B)。
		スレッドT3 =新しいスレッド(C); 
		スレッドT4 =新しいスレッド(D); 
		
		t1.start(); 
		t2.start(); 
		t3.start(); 
		t4.start(); 
	} 
}

  

おすすめ

転載: www.cnblogs.com/WINDZLY/p/11788632.html