谁能帮我解决以下问题?
public class Starter extends Thread{
private int x=2;
public static void main(String[] args) throws Exception{
new Starter().makeItSo();
}
public Starter(){
x=5;
start();
}
public void makeItSo() throws Exception {
join();
x=x-1;
System.out.println(x);
}
public void run(){x*=2;}
}
A. 4
B. 5
C. 8
D. 9
E. 编译失败
F. 运行时抛出异常
G. 无法确定
在转储中,答案是 D。我知道在 new Starter().makeItSo 中创建了一个新线程。但是谁能告诉我为什么 run() 中的 x*=2 在方法 makeItSo 中的 x=x-1 和 System.out.println(x) 之间执行?