Предполагая, что у меня есть следующий код:Threadsafe публикации структуры объектов java?
final Catalog catalog = createCatalog();
for (int i = 0; i< 100; i++{
new Thread(new CatalogWorker(catalog)).start();
}
«Каталог» является структура объекта, и метод createCatalog() и «Каталог» структура объекта не была написана с параллелизмом в виду. Есть несколько неконечных, нелетучие ссылок в пределах каталога продукции, может быть даже изменяемое состояние (но это будет уже быть обработано)
Я так понимаю модель памяти, этот код не потокобезопасный. Есть ли простой способ сделать его безопасным? (Обобщенная версия этой проблемы действительно о однопоточном строительстве общих структур, которые создаются перед тем нитей взрываются в действие)
Хм, интересно: Вы говорите, что я в безопасности, если синхронизировать все обновления с изменяемым состоянием, даже если существует состояние, которое только «эффективно неизменено»? (Я * знаю * это рискованная модель с точки зрения обслуживания) – krosenvold
Ну, я бы не сказал, что это делает вас безопасным в целом, но это делает вас безопасным в условиях чистой памяти. Обратите внимание, что вам нужно синхронизировать все * обращения *, а не только * обновления *, иначе вы могли бы получить «устаревшие» данные при его прочтении. –
Yup. Хороший ответ;) – krosenvold