Differenze tra le versioni di "Java/Multithreading"

m
Bot: apostrofo dopo l'articolo indeterminativo e modifiche minori
m
m (Bot: apostrofo dopo l'articolo indeterminativo e modifiche minori)
 
== 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'''.
È bene evidenziare come la [[w:CPU|CPU]], in realtà, esegua comunque una sola operazione alla volta mentre è il [[w:sistema operativo|sistema operativo]] a alternare ciclicamente l'esecuzione dei vari processi così velocemente da far sembrare all'utente che questi stiano venendo eseguiti simultaneamente. Nel caso di un computer dotato di più processori, invece, può esserci effettiva simultaneità ma solo per tanti processi quante sono le CPU.
 
== Sincronizzazione ==
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?
 
Ad esempio, un Thread potrebbe ordinare i valori in un array numerico tramite un bubblesort mentre un altro lo legge un valore alla volta, e quest'ultimo potrebbe leggere due volte lo stesso valore perché è stato spostato durante la lettura dal thread concorrente.
public volatile boolean pronto=true;
</source>
[[Categoria:javaJava|Threads]]
{{Avanzamento|75%|6 giugno 2010}}
3 150

contributi