Я уже знаю, что если я пишу в энергонезависимое поле из другого потока, он, вероятно, сможет его кэшировать, поэтому все остальные потоки не увидят фактического значения. Но если я вызову, например, start()
для объекта потока ПОСЛЕ присвоения значения в файл, 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;
}
}
start()
, в отношении записей, сделанных потоком, вызвавшимstart()
, до вызова. Никакой другой гарантии на любую другую резьбу не делается. - person Holger   schedule 20.12.2020