====== 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 == * [[JavaThreadTrabocchetti]] una dispensa da me redatta sul tema delle insidie della programmazione multi thread in Java * [http://www.cs.umd.edu/users/jmanson/java/j1_talk.ppt JMM] di [http://www.cs.umd.edu/~pugh/ Bill Pugh]. Utili e sintetiche slide. * [http://javaboutique.internet.com/articles/java_memory/ JMM explained] il JMM piegato in maniera sintetica. * [[EsempioFuture]] esempio semplice di come è possibile utilizzare l'interaccia Future di java5