Честно говоря, это продолжение это мой вопрос , вдохновленный этим ответом: https://stackoverflow.com/a/53262717/1479414
Предположим, у нас есть класс:
public class Foo {
private Integer x;
public void setX(Integer x) {
this.x = x;
}
public Integer getX() {
return this.x;
}
}
И давайте рассмотрим очень специфический сценарий , когда у нас есть только два потока, которые взаимодействуют с переменной x
:
В момент времени 1 создается поток T1
Во время 2 T1 устанавливает значение: foo.setX(123);
Во время 3 создается поток T2
В момент 4 T2 считывает значение: foo.getX();
Другие темы не взаимодействуют с этим значением.Обе операции выполняются только один раз.
Таким образом, нет очевидных x
операций чтения значения до того, как поток T2 выполнит свою работу.
Вопрос: существует ли какая-либо автоматическая оптимизация для L-кэша, котораяможет кешировать null
значение переменной x
, поэтому поток T2
будет читать его кэшированное значение?Другими словами, нужен ли нам модификатор volatile
в этом конкретном сценарии?