Согласно JCP (16.2.2. Безопасная публикация):
Это происходит до того, как гарантия на самом деле является более сильным обещанием видимости и упорядоченности, чем при безопасной публикации . Когда X безопасно публикуется от A до B, безопасная публикация гарантирует видимость состояния X, но не состояния других переменных, которых, возможно, коснулся A. Но если A помещает X в очередь - до того, как B извлекает X из этой очереди, B не только видит X в том состоянии, в котором A оставил его (при условии, что X не был впоследствии изменен A или кем-либо еще), но B видит все, что A сделал до передачи обслуживания (опять же, с учетом того же предостережения)
Мне интересно, когда безопасная публикация может быть без предварительной, то есть без использования volatile / atomics или синхронизации (или через фреймворки, такие как AQS, которые используйте любое из перечисленных внутри)?
Один случай - это последние поля в неизменяемом объекте, где вы можете опубликовать его без каких-либо дополнительных шагов.
Есть ли другие случаи?
UPD: перечитайте 3.5.3. Идиомы Safe Publication, другой случай - «Инициализация ссылки на объект из статического инициализатора». Кажется, теперь это все варианты.