変数varの値は常に0です。ITは、メソッドが呼び出されなかったかのようになります。スレッドの内部からvalの値を変更できるようにしたいと思います.getVal()を呼び出すと、新しい値にアクセスできるようにしたいと考えています。Javaオブジェクトの属性をスレッドから更新しますか?
public class Test1 {
private int val;
public Test1() {
val=0;
}
public void changeVal() {
new Thread(new Runnable() {
public void run() {
val=1;
}
}).start();
}
public int getVal() {
return this.val;
}
public static void main(String[]args) {
Test1 x=new Test1();
x.changeVal();
System.out.println("VAl: "+x.getVal());
}
}
値を印刷する前にスレッドの開始/完了を待つ必要があるかもしれません。 [Thread.join()](https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join()) –
'メソッドが呼び出されなかったかのようです'これは、コードが正しく同期されていない場合にスレッド間の可視性がどのように失敗するかについての非常に正確な記述です。 – biziclop