このプログラムが出力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メソッドを呼び出します。しかし、makeItSo()にSOPを入れると、join()の呼び出し後にメインスレッドがそこで待機していることが示されます。なぜ?makeItSo()とrun()の間にシーケンスがないので、Xの値は予測できません。