当我遇到使用等待/通知方法的示例时,我正在查看 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 是否有可能在主线程之前执行?