以下のプログラムが 12 ではなく 11 を出力するのはなぜですか? スレッドは同じインスタンス変数を使用していませんか? 説明してください?
public class Tester extends Thread {
private int i;
public static void main(String[] args){
Tester t = new Tester();
t.run();
System.out.print(t.i);
t.start();
System.out.print(t.i);
}
public void run(){ i++;}
}
上記のコードは正常にコンパイルされます。i は、オブジェクトの構築時にデフォルトで 0 値に設定されます。関係概念の前に発生します。スレッドの開始前に実行されたすべてのコードが完了します。概念は、インスタンス変数は複数のスレッドで共有されます。ここでは、メイン スレッドとテスター スレッドの 2 つのスレッドが実行されます。だから私は両方のスレッドと共有する必要がありますか? - i が共有されていて、テスター スレッドを開始する前に事前発生関係が維持されている場合、インクリメントされた i の値はテスター スレッドに表示されますか?