public static class ThreadPrinterimplements Runnable {
private String name;
private Object prev;
private Object self;
private ThreadPrinter(String name, Object prev, Object self) {
this.name = name;
this.prev = prev;
this.self = self;
}
@Override
public void run() {
int count = 3; //印刷回数
while (count > 0) {//マルチスレッド同時実行、if は使用できない、誤ったウェイクアップ同期を避けるためにループを使用して待機条件をテストする必要がある (
prev ) { // 最初に
同期された前のロックを取得します (自己) {// 次に、自己ロックを取得します
System.out.print(name);
count--;
self.notifyAll();// まず self を解放し、他のスレッドを起動して自己ロックを競合する
}
try {
prev.wait(); // prev を再度解放し、スリープそしてウェイクアップを待ちます
/ **
* Notice() が呼び出された後、オブジェクトのロックはすぐには解放されませんが、ロックは対応する synchronized(){} ステートメント ブロックの実行後に自動的に解放されることに注意してください。 * JVM will wait( )
オブジェクト ロックのスレッド スレッドをランダムに選択し、それにオブジェクト ロックを与え、スレッドをウェイクアップして、実行を継続します。
*/
} catch (InterruptedException e) {
e.printStackTrace();
}
public static void main(String [ ] args) throws Exception { Object a
= new
Object (); オブジェクト b = 新しい Object(); オブジェクト c = 新しい Object(); ThreadPrinter pa = new ThreadPrinter("A", c, a); ThreadPrinter pb = new ThreadPrinter("B", a, b); ThreadPrinter pc = new ThreadPrinter("C", b, c); 新しいスレッド(pa).start(); // Thread.sleep(3); 新しいスレッド(pb).start(); // Thread.sleep(10); 新しいスレッド(pc).start();
// Thread.sleep(10);
}
private String name;
private Object prev;
private Object self;
private ThreadPrinter(String name, Object prev, Object self) {
this.name = name;
this.prev = prev;
this.self = self;
}
@Override
public void run() {
int count = 3; //印刷回数
while (count > 0) {//マルチスレッド同時実行、if は使用できない、誤ったウェイクアップ同期を避けるためにループを使用して待機条件をテストする必要がある (
prev ) { // 最初に
同期された前のロックを取得します (自己) {// 次に、自己ロックを取得します
System.out.print(name);
count--;
self.notifyAll();// まず self を解放し、他のスレッドを起動して自己ロックを競合する
}
try {
prev.wait(); // prev を再度解放し、スリープそしてウェイクアップを待ちます
/ **
* Notice() が呼び出された後、オブジェクトのロックはすぐには解放されませんが、ロックは対応する synchronized(){} ステートメント ブロックの実行後に自動的に解放されることに注意してください。 * JVM will wait( )
オブジェクト ロックのスレッド スレッドをランダムに選択し、それにオブジェクト ロックを与え、スレッドをウェイクアップして、実行を継続します。
*/
} catch (InterruptedException e) {
e.printStackTrace();
}
public static void main(String [ ] args) throws Exception { Object a
= new
Object (); オブジェクト b = 新しい Object(); オブジェクト c = 新しい Object(); ThreadPrinter pa = new ThreadPrinter("A", c, a); ThreadPrinter pb = new ThreadPrinter("B", a, b); ThreadPrinter pc = new ThreadPrinter("C", b, c); 新しいスレッド(pa).start(); // Thread.sleep(3); 新しいスレッド(pb).start(); // Thread.sleep(10); 新しいスレッド(pc).start();
// Thread.sleep(10);
}