next up previous
Next: Specifiche del linguaggio Up: Il linguaggio Java Previous: Networking Package

Multithreading

Un thread è un singolo flusso sequenziale all'interno di un programma; in Java, più thread possono essere eseguiti ``contemporaneamente''; di fatto l'esecuzione di un programma è sempre sequenziale: è il runtime di Java che si occupa di saltare da un thread all'altro, simulando la contemporaneità dei vari processi. Il metodo usato è il ``time-slicing'', che assegna ad ogni thread una certa percentuale del tempo-macchina a disposizione. Tuttavia, non tutti i sistemi supportano il time-slicing, e perciò ad ogni thread viene assegnata una certa priorità: un thread a priorità superiore può soppiantare i thread a priorità inferiore, conquistando il controllo della CPU.

Java supporta il multithreading a livello di sintassi del linguaggio, e tramite il sistema runtime. A livello di linguaggio, un thread è un oggetto della classe standard Thread, o di una sua sottoclasse, e possiede i metodi necessari a controllarne l'avvio, l'esecuzione, l'interruzione e lo stato. I metodi che sono dichiarati con la parola chiave synchronized non sono soggetti ad esecuzione concorrente, e cadono sotto il controllo dei monitor, che assicurano la consistenza dei valori delle variabili all'interno del metodo. Ogni classe ed ogni oggetto istanziato ha il suo proprio monitor, che viene attivato quando è necessario. I monitor di Java sono ``re-entrant'', il che significa che un metodo può acquisire lo stesso monitor più di una volta, in istanti successivi.

I metodi sincronizzati consentono di scrivere applicazioni ``thread-safe'', le cui funzioni, cioè, possono essere richiamate da più thread concorrenti, ma, fra questi, solo uno alla volta può accedere alle varabili di istanza.


next up previous
Next: Specifiche del linguaggio Up: Il linguaggio Java Previous: Networking Package
Marco Delaurenti
1999-06-25