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