我已经知道,如果我从另一个线程写入非易失性字段,他可能会缓存它,这样所有其他线程都不会看到实际值。但是,如果我在线程对象上调用例如start()
AFTER 分配值到归档,JVM 将为所有其他线程更新这个值。但是,如果我将执行相同的操作但不直接将值分配给字段,JVM 会更新该字段的值,如下所示:object.field = 100
但使用调用方法object.setFiled(100)
。
public class Main {
int value;
public static void main(String[] args) {
Main main = new Main();
main.value = 100;
new Thread(() -> System.out.println(main.getValue())).start();
在这种情况下,所有其他线程的字段值肯定是相同的
}
public int getValue() {
return value;
}
}
public class Main {
private int value;
public static void main(String[] args) {
Main main = new Main();
main.setValue(100);
new Thread(() -> System.out.println(main.getValue())).start();
但是在这种情况下结果会一样吗?
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}