Рассмотрим volatile int sharedVar
. Мы знаем, что JLS дает нам следующие гарантии:
w
, предшествующее его записи значения i
в sharedVar
в программном порядке happens-before
, действие записи;i
с помощьюw
happens-before
успешное чтение i
из sharedVar
потоком чтения r
;i
из sharedVar
потоком чтенияr
happens-before
все последующие действия r
в программном порядке.Однако по-прежнему нет гарантии времени настенных -часов относительно , когда читающий поток будет наблюдать значение i
. Реализация, которая просто никогда не позволяет читающему потоку увидеть, что значение по-прежнему соответствует этому контракту.
Я думал об этом некоторое время и не вижу никаких лазеек, но я предполагаю, что они должны быть. Укажите, пожалуйста, лазейку в моих рассуждениях.