Модель памяти Java (начиная с 1.5) обрабатывает поля final
иначе, чем поля не final
. В частности, при условии, что ссылка this
не исчезает во время построения, записи в поля final
в конструкторе гарантированно будут видны в других потоках, даже если объект сделан доступным для другого потока через гонку данных. (Запись в не final
поля не гарантированно будет видимой, поэтому, если вы неправильно опубликуете их, другой поток может увидеть их в частично сконструированном состоянии.)
Есть ли документация о том, как / если компилятор Scala создает final
(а не final
) вспомогательные поля для классов? Я просмотрел спецификацию языка и искал в Интернете, но не могу найти никаких окончательных ответов. (Для сравнения, @scala.volatile
аннотация задокументирована для пометки поля как volatile
)