Java e Thread

A cura di Flavio Casadei Della Chiesa

In questa sezione del sito trovarete note, slide e discussioni sull'argomento scottante della programmazione concorrente in Java.

Non sono un esperto della materia, ritengo comunque di avere una base più solida di quella di un neofita. I contenuti in questa parte di sito sono da considerre come cose sentite da un non esperto, non devono quindi essere prese come dogmi o roba assolutamente funzionante.

Concetti introduttivi

Cominciamo con qualche definizione informale

Processi

Un processo è l'esecuzione di un programma (o sottoprogramma) sequenziale. Lo stato di un processo ad un certo istante nel tempo consiste di tutte le sue variabili esplicite dichiarate dal programmatore e da quelle implicite dettate dalla piattaforma hardware e dal sistema operativo. Via via che il processo va avanti questo trasforma il suo stato attraverso l'esecuzione di statement; questi non sono altro che sequenze di una o più istruzioni atomiche.

Testo preso da [http://www.doc.ic.ac.uk/~jnm/book/ Concurrency state models and Java programs]

Processi e Thread

Una differenza fra Thread e processi consiste nel modo con cui essi condividono le risorse. Mentre i processi sono di solito fra loro indipendenti, utilizzando diverse aree di memoria ed interagendo soltanto mediante appositi meccanismi di comunicazione messi a disposizione dal sistema, al contrario i Thread tipicamente condividono le medesime informazioni di stato, la memoria ed altre risorse di sistema.

Testo preso da [http://it.wikipedia.org/wiki/Processo_(informatica) wikipedia]

Questa è una definizione di carattere generale, per quanto riguarda il linguaggio di programmazione Java è necessario far presente che i Thread condividono logicamente, ma non fisicamente, la stessa memoria. Non sempre un Thread è in grado di vedere agiornate le modifiche effettuate da un alrto Thread. La specifica che si occupa di normare come i Thread interagiscono con la memoria è il JavaMemoryModel. Da notare che nel JavaMemoryModel non è assolutamente presente una regola che dice 'Ogni Thread vede istantaneamente le modifiche effettuate dagli altri Thread senza se e senza ma!'. Molti trabocchetti della programmazione multithread in Java si basano sull'assunzione che esista una regola tipo la precedente.

Argomenti correlati