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