要件:
同期機構、SLEEP()メソッドによって、アニメーション表示を実現するために()メソッドへの参加します。
スレッド:1,3,5,7,9
Bのスレッド:2,4,6,8,10
プロパンスレッド:A、B、C、D、E
メイン()スレッド出力:スレッドを開始し、スレッド終了
出力:スレッドの開始、1-2 ## 3-B-4 ## 5-C-6 ## ...
考えます:
複数のマーカーを決定し、アナログ(コンシューマ - プロデューサ)が待機した後、各スレッドを出力し、その後、それらのマークを変更します
重要なリソース - 複数== putXは()==メソッドは自身のマーカー(== isEmptyX ==)次に出力を決定します
複数のスレッドが交互に整然とした実行可能にします
コード:
クラスリソース{
真のプライベートブールisEmpty01 =;
プライベートブールisEmpty02 =偽;
プライベートブールisEmpty03 =偽;
//各メソッドが目覚め他の人を待って、待ちに一つの出力、各出力に対応して置きます
公共ボイドput1(){
しばらく(!isEmpty01){
{試します
待つ();
}キャッチ(InterruptedExceptionある電子){
e.printStackTrace();
}
}
//出力した後、
偽isEmpty01 =;
isEmpty02 =はtrue。
notifyAll();
}
公共ボイドput2(){
しばらく(!isEmpty02){
{試します
待つ();
}キャッチ(InterruptedExceptionある電子){
e.printStackTrace();
}
}
偽isEmpty02 =;
isEmpty03 =はtrue。
notifyAll();
}
公共ボイドput3(){
しばらく(!isEmpty03){
{試します
待つ();
}キャッチ(InterruptedExceptionある電子){
e.printStackTrace();
}
}
偽isEmpty03 =;
isEmpty01 =はtrue。
notifyAll();
}
}
クラスPlayer01は{Runnableをを実装します
プライベートリソースのres;
プライベートString []型ARR。
Player01(){}
Player01(String []型ARR、リソースRES){
this.arr = ARR。
this.resの= resを。
}
ます。public void実行(){
同期(RES){
私は、(私は0 = int型のために
//間違ったポイント
// 61および62は、これらの2つが交換することはできません
res.put1();
System.out.print([I] + ARR " - ")。
{試します
Thread.sleep(1000);
}キャッチ(InterruptedExceptionある電子){
e.printStackTrace();
}
}
}
}
}
クラスPlayer02は{Runnableをを実装します
プライベートリソースのres;
プライベートString []型ARR。
Player02(){}
Player02(String []型ARR、リソースRES){
this.arr = ARR。
this.resの= resを。
}
ます。public void実行(){
同期(RES){
私は、(私は0 = int型のために
res.put2();
System.out.print([I] + ARR " - ")。
{試します
Thread.sleep(1000);
}キャッチ(InterruptedExceptionある電子){
e.printStackTrace();
}
}
}
}
}
クラスPlayer03は{Runnableをを実装します
プライベートリソースのres;
プライベートString []型ARR。
Player03(){}
Player03(String []型ARR、リソースRES){
this.arr = ARR。
this.resの= resを。
} 無錫、よく知られた女性病院http://www.wxbhnkyy39.com/
ます。public void実行(){
同期(RES){
私は、(私は0 = int型のために
res.put3();
System.out.print(ARR [I] + "##")。
{試します
Thread.sleep(1000);
}キャッチ(InterruptedExceptionある電子){
e.printStackTrace();
}
}
}
}
}
クラスTest08 {
パブリック静的無効メイン(文字列[] args){
文字列[] ARR1 = { "1"、 "3"、 "5"、 "7"、 "9"}。
文字列[] ARR2 = { "A"、 "B"、 "C"、 "D"、 "E"}。
文字列[] ARR3 = { "2"、 "4"、 "6"、 "8"、 "0"}。
リソースRES =新しいリソース();
Player01 P1 =新しいPlayer01(ARR1、RES);
Player02 P2 =新しいPlayer02(ARR2、RES);
Player03 P3 =新しいPlayer03(ARR3、RES);
スレッドT1 =新しいスレッド(P1);
スレッドT2 =新しいスレッド(P2)。
スレッドT3 =新しいスレッド(P3)。
t1.start();
t2.start();
t3.start();
}
}
結果を生成します。
それは重要です:
そのようなマーカーは、交互に順序付けられた実行つ以上のスレッドを使用して実装することができます