Analizziamo le regole di visibilità e ordinamento delle operazioni nel Java Memory Model: cosa significa la relazione
happens-before, come e quando aiutano
volatile,
synchronized, i campi final (
final), e perché senza di essi compaiono dati «non aggiornati». Mostreremo la pubblicazione sicura degli oggetti, il
double-checked locking corretto, l’accesso a basso livello tramite
VarHandle, l’impatto del false sharing e l’annotazione
@Contended, nonché note pratiche su
Thread.start()/
Thread.join(),
Future.get() e i microbenchmark
JMH.