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