Эффект видимости изменчивых переменных выходит за рамки значения самой изменчивой переменной. Когда поток A записывает в изменчивую переменную, а затем поток B читает ту же самую переменную, значения всех переменных, которые были видимы для A до записи в изменчивую переменную, становятся видимыми для B после чтения изменчивой переменной. Таким образом, с точки зрения видимости памяти запись энергозависимой переменной аналогична выходу из синхронизированного блока, а чтение энергозависимой переменной похоже на вход в синхронизированный блок.
Существует , однако сценарий, который мне не совсем ясен даже после прочтения ответов на соответствующие вопросы на этом сайте, а именно:
- Каковы будут последствия поток A0 записывает в ту же переменную переменную перед потоком A?
Код: Выделить всё
A0
Код: Выделить всё
B
Могу ли я с уверенностью предположить, что и A, и B гарантированно увидят все, что было видно A0 до того, как A0 записал переменную переменную?
ОБНОВЛЕНИЕ
Это концептуальный вопрос о модели памяти Java.
Я знаю, что не может предсказать порядок, в котором запись в изменчивую переменную происходит в потоках A0 и A и чтение в потоке B.
Однако просто для облегчения обсуждения предположим, что A0 запускается за много времени до того, как это сделает A, и еще через значительное время запускается B, и давайте сделаем упрощающее предположение, что этого достаточно, чтобы гарантировать, что запись и чтение происходят в описанном порядке (я знаю, что порядок не может быть гарантирован только по времени, это всего лишь упрощение, чтобы не отклоняться от исходного вопроса).
Подробнее здесь: https://stackoverflow.com/questions/281 ... le-in-java