生産者と消費者テスト

パッケージT1;

パブリッククラスTestThread5 {

パブリック静的無効メイン(文字列[] args){
共用S =新しい共有()。
新しいプロデューサー(S).start();
新しい消費者(複数可).start();
}
}

クラス共有{
プライベートチャーC。
プライベート揮発ブール書き込み可能=はtrue。

同期のボイドsetSharedChar(char型c)の{
ながら、{(書き込み可能!)
トライ{
待機();
}キャッチ(例外e){
}
}

this.c = C。
書き込み可能= falseは、
通知()。
}

同期チャーgetSharedChar(){
一方(書き込み可能){
試み{
待ち()。
}キャッチ(例外e){
}
}

書き込み可能=はtrue。
通知()。
Cを返します。
}
}

クラスプロデューサーは、Thread {拡張
民間最終共用Sを、

プロデューサ(共用S){
this.s = S。
}

@Override
{公共のボイドの実行を()

用(CHAR CH = ''; CH <= 'Z'; CH ++){
同期(S){
s.setSharedChar(CH)。
System.out.println( "プロデューサー製" CH +)。
}
}
}
}

クラスの消費者は、Thread {拡張
民間最終共用Sを、

公共消費(共用S){
this.s = S。
}

@Override
公共ボイドラン(){
チャーCH。
実行{
(S)同期{
CH = s.getSharedChar()。
System.out.println(CH + "消費者が消費します");
}
}一方(CH = 'Z'!)。
}
}

繰り返しの結果を出力します。

プロデューサによって生成される
消費者によって消費される
プロデューサによって生成されるB
bは、消費者が消費する
プロデューサによって生成されるC
、Cは、消費者が消費する
プロデューサによって生成D
消費者によって消費D
プロデューサによって生成される電子
消費者によって消費される電子
プロデューサによって生成fは
消費者によって消費さfを
生成Gプロデューサによって
G消費者によって消費される
プロデューサによって生成される時間
消費者によって消費さH
iはプロデューサによって生成される
iは、消費者が消費する
プロデューサによって生成J
消費者によって消費J
プロデューサによって生成されるK
消費者によって消費されるK
プロデューサによって生成さL
Lは、消費者によって消費さ
プロデューサによって生成されるM
mは、消費者によって消費される
Nプロデューサによって生成される
N個の消費者によって消費される
プロデューサによって生成oを
消費者によって消費oを
プロデューサによって生成P
P消費者によって消費される
プロデューサによって生成Q
消費者によって消費Q
プロデューサによって生成されるR
、R消費者によって消費される
の生成プロデューサ
Sは、消費者が消費する
プロデューサによって生成されるT
消費者によって消費さT
uはプロデューサによって生成される
Uは、消費者が消費する
プロデューサによって生成されるV
消費者によって消費されるV
プロデューサによって生成さwは
、消費者によって消費さwは
、プロデューサによって生成されるxは
、消費者によって消費されるxは
プロデューサによって生成されるY
消費者によって消費Y
プロデューサによって生成されるZ
消費者によって消費されるZ

 

おすすめ

転載: www.cnblogs.com/dengw125792/p/12599515.html