Я прочитал, что код внутри синхронизированного блока соответствует семантике «происходит раньше», поэтому все значения, записанные внутри синхронизированного блока, должны быть видны другим потокам подряд.Кроме того, я прочитал, что кэши сбрасываются только после завершения синхронизированного блока.Как можно было бы применить вышеуказанную семантику «произойдет раньше» в сценарии, описанном ниже, если только очищенные кэши сбрасываются с завершением синхронизированного блока?
Поток A имеет ссылку на объект C и изменяет поле C в своем синхронизированномкод синхронизирован на C. Поток B также получил ссылку на объект C. Теперь поток A приостанавливается до завершения синхронизированного кода.Поток B переходит к действию и получает доступ к полю объекта C в коде без синхронизации с C.
Теперь поток B гарантированно увидит изменения, внесенные потоком A?