sHA*_*ILU 1 java multithreading
任何人都可以解释为什么这个程序给出输出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;
}
}
Run Code Online (Sandbox Code Playgroud)
主线程启动线程0并调用run方法.但如果你把SOP放在makeItSo()中,它会说主线程在调用join()之后在那里等待!为什么?我认为makeItSo()或run()之间没有序列,所以X的值将是不可预测的.
此处的执行顺序是固定的,因为调用join():
x = 5.start哪个调用run新的线程.run执行x *= 5,x等于10.makeItSo叫做.它呼唤join,因此等待run结束.makeItSo集合x = x-1,x等于9.