Questa lezione parla di che cos’è una risorsa condivisa nelle applicazioni multithread, perché si verificano le race condition e gli «aggiornamenti persi», e come proteggere i dati con
synchronized. Vedremo le tecniche di base di sincronizzazione (metodi e blocchi), parleremo degli strumenti moderni di
java.util.concurrent (
Lock,
ReentrantLock,
Semaphore e altri), vedremo esempi pratici con l’incremento di un contatore e gli errori tipici (non atomicità di
i
++, oggetto di lock errato, miti su
volatile).