You are on page 1of 5

Come creare thread con linterfaccia Runnable

Per creare un thread mediante lutilizzo dellinterfaccia Runnable: codificare il metodo run() nella classe che implementa linterfaccia Runnable; creare unistanza della classe tramite new; creare unistanza della classe Thread con unaltra new, passando come parametro listanza della classe creata; invocare il metodo start() sul thread creato, producendo una chiamata al suo metodo run()

In questo caso non si potuto utilizzare il metodo getName() per stampare il nome del thread e usare tale nome come suono delle campane (din): gli oggetti della classe Campana (che il thread) non appartengono alla classe Thread ma implementano solamente linterfaccia Runnable. Si devono quindi creare nel main oggetti di tipo Thread passando loro come parametro del costruttore loggetto Runnable creato in precedenza

Oggetti di tipo Thread a cui passare come parametro del costruttore loggetto Runnable (creato sempre nel main)

Per riprodurre pi suoni si sfrutta un unico metodo run() nellinterfaccia Runnable

Si utilizza ununica classe associata a differenti thread, chiamati rispettivamente: thrd1, thrd2, thrd3

Si poteva ricorrere a diverse modalit di definizione per i thread mediante linterfaccia Runnable

Come visto, loutput non sempre uguale: dipende dalla schedulazione e dai processi/thread che al momento sono nella lista di quelli pronti. Questa modalit viene detta non deterministica. Pertanto, qualora sia necessaria una specifica sequenza tra i thread necessario implementare meccanismi di sincronizzazione

Il thread ha principalmente due modi di lasciare il processore: alla terminazione dellesecuzione del codice presente nel metodo run() e in questo caso un rilascio definitivo; quando esso necessita di una risorsa non disponibile e viene messo nello stato di attesa La classe Thread offre un insieme di metodi, detti di controllo, che permettono di gestire luso del processore liberandolo dallutilizzo stop(): invocato da un altro oggetto che lo termina definitivamente; suspend(): invocato da un altro oggetto che lo sospende temporaneamente; resume(): invocato da un altro oggetto che lo riattiva dalla sospensione; sleep(): invocato da un oggetto che lo sospende per un int di millisecondi