待機/通知メソッドを使用する例に遭遇したとき、私は Kathy Sierra の本のスレッド化の章を見ていました:
class ThreadA {
public static void main(String [] args) {
ThreadB b = new ThreadB();
b.start();
synchronized(b) {
try {
System.out.println("Waiting for b to complete...");
b.wait();
} catch (InterruptedException e) {}
System.out.println("Total is: " + b.total);
}
}
}
class ThreadB extends Thread {
int total;
public void run() {
synchronized(this) {
for(int i=0;i<100;i++) {
total += i;
}
notify();
}
}
}
コードを実行すると、常に同じ出力が生成されます。
b が完了するのを待っています... 合計: 4950
以下を追加して、ThreadB の run() の同期ブロックを変更しました。
System.out.println("ThreadB is executed");
問題は、なぜ私は取得し続けるのですか
「b が完了するのを待っています...」
前
「スレッド B が実行されます」
? スレッド b がメインスレッドより先に実行される可能性はありませんか?