Если я получаю доступ к объекту внутри синхронизированного метода или синхронизированного блока, все ли объекты в этом доступном элементе также синхронизируются?
Представьте, что есть объект Queue
, имеющий синхронизированный метод add()
и take()
, принимающий и раздающий сложный объект Thing
.Thing
имеет много списков с другими объектами.
Теперь поток изображения Before
создает Thing
и помещает некоторые существующие объекты в Thing
, модифицирует некоторые из этих объектов и так далее.Поток Before
добавляет Thing
к Queue
.Чуть позже поток After
берет Thing
из Queue
.
ВОПРОС: Будет ли Thing
и все его дочерние / субобъекты находиться в том же состоянии, в котором Before
оставил их?Даже если поток After
работал над одним из этих подэлементов немного раньше?Поскольку я представляю, что процессор для потока After
может все еще иметь некоторую кэшированную информацию об этом подэлементе (адрес этого подобъекта остается прежним).Все эти кэшированные данные будут признаны недействительными только через синхронизированный доступ к отцовскому объекту Thing
?
Пожалуйста, не давайте ответов, таких как использование библиотек параллелизма и т.д.1028 *