Безопасная публикация без происшествий- перед? Как бы то ни было, кроме final?

Согласно 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, другой случай - «Инициализация ссылки на объект из статического инициализатора». Кажется, теперь это все варианты.

6
задан yetanothercoder 28 March 2011 в 12:26
поделиться