Differenze tra le versioni di "Java/Multithreading"

nessun oggetto della modifica
(...)
{{java/Seconda parte}}
 
== Introduzione ==
Sorge spesso l'esigenza di fare eseguire al programma più operazioni in parallelo, ossia contemporaneamente. Per esempio si potrebbe voler salvare sul disco un flusso di dati ricevuti da internet mentre si inviano altri dati a un'altra macchina o si gestisce un' interfaccia grafica.
Poiché il linguaggio, per quanto abbiamo visto finora, viene eseguito una sola istruzione alla volta in maniera lineare, è necessario introdurre una nuova struttura che permetta di "sdoppiare" il flusso di esecuzione del programma per compiere più operazioni simultaneamente. Questa struttura è il '''thread'''.
Il risultato sarà una produzione continua di messaggi "sono il thread" e "sono il chiamante", che si alterneranno man mano che il sistema operativo e la macchina virtuale alterneranno l'esecuzione tra i thread.
 
== Sincronizzazione ==
I thread possono interagire tra loro come fanno delle classi qualsiasi: un thread è comunque una classe, può ricevere e memorizzare reference dal costruttore, se ne possono chiamare i metodi definiti all'interno e anche il metodo run() può chiamare metodi dei vari oggetti.
 
Il fatto che i thread siano eseguiti in simultanea dà origine a un nuovo tipo di problema, detto ''di concorrenza'': cosa accade se un thread modifica un valore di una variabile mentre un altro lo richiede?