Il modello di memoria Java (dalla versione 1.5) tratta i campi final
in modo diverso nei campi non- final
. In particolare, a condizione che il riferimento this
non scappi durante la costruzione, le scritture nei campi final
nel costruttore sono garantite per essere visibili su altri thread anche se l'oggetto è reso disponibile all'altro thread tramite una corsa di dati. (Non è garantito che i campi non final
siano visibili, quindi se li pubblichi impropriamente, un altro thread potrebbe vederli in uno stato parzialmente costruito.)Scala e modello di memoria Java
C'è qualche documentazione su come/se il compilatore Scala crea final
(anziché non final
) campi di supporto per le classi? Ho esaminato le specifiche del linguaggio e ho cercato nel web ma non ho trovato nessuna risposta definitiva. (In confronto la @scala.volatile
annotazione è documentato per contrassegnare un campo come volatile
)
Ma il comportamento, dal punto di vista della concorrenza, dei costrutti del linguaggio dovrebbe essere parte delle sue specifiche, direi! –