La Java volatile keyword è utilizzata per caratterizzare le variabili java “memorizzate nella memoria principale”. Più precisamente questo significa che ogni lettura di una variabile volatile sarà letta dalla memoria principale del computer e non dalla cache della CPU, ed ogni scrittura della variabile volatile sarà scritta all’interno della memoria princiapale.

Dalla specifica di Java 5 una variabile volatile sono scritte e lette all’interno della memoria principale del computer.

La Java volatile keyword garantisce visibilità di cambiamento tra differenti thread. In applicazioni multi-thread dove i thread operano con variabili non volatili, ogni thread “copia” la variabile all’interno della cache di CPU per ragioni di performance. Nei PC attuali sono contenuti diverse CPU e quindi ogni thread lavora con la propria CPU, questo provoca un errore perchè ogni thread lavora con la copia della variabile contenuta nella cache della CPU.

volatile
Quando volatile è necessario?

La keyword volatile non è sufficiente è necessario utilizzare “synchronization”  nel caso in cui bisogna garantire la lettura e scrittura di una variabile atomica.

Se in un caso solo un thread scrive e gli altri leggono la variabile volatile la keyword volatile garantisce che la variabile letta sia aggiornata.

Attenzione alle performance

Lettura e scrittura di variabili volatili provoca la scrittura e lettura nella memoria principale. La lettura e scrittura nella memoria principale è più costosa di accesso alla cache della CPU.

Accesso alle variabili volatili evitano anche l’istruzione riordino che è una normale tecnica di miglioramento delle prestazioni. Pertanto, si consiglia di utilizzare solo le variabili volatili quando si ha realmente bisogno di far rispettare la visibilità delle variabili.

Categories: Informatica, JAVA

Comments are closed.