任何人都可以解释为什么这个程序给出输出 9?我猜测“不可预测的行为”是它的答案,因为主线程和线程 0 可以按任何顺序执行。join() 将在主线程本身上做什么?
public class Starter extends Thread{
private int x = 2;
public static void main(String[] args) throws Exception{
new Starter().makeItSo();
}
public Starter(){
//Thread main
x=5;
start();
}
public void makeItSo() throws Exception{
//Thread main
join();
x = x-1;
System.out.println(x);
}
public void run(){
//Thread-0
x*= 2;
}
}
主线程启动 thread-0 并调用 run 方法。但是如果你把 SOP 放在 makeItSo() 中,它会说在调用 join() 之后主线程正在那里等待!为什么?我认为 makeItSo() 或 run() 之间没有顺序,因此 X 的值将是不可预测的。