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