qual’ è la classe principale per i thread in java?
java.lang.Thread
cos’è il metodo run?
il metodo run è un metodo che è vuoto nella classe java.lang.Thread, di cui il programmatore fa l’overriding quando va a creare un thread
È l’entry point del thread:
Ogni istruzione eseguita dal thread è inclusa in questo metodo
Un thread è considerato alive finche il metodo run() non ritorna
Quando run() ritorna il thread è considerato dead
cos’è il metodo start()?
il metodo che avverte la JVM che il thread è pronto per essere eseguito.
cosa significa “nondeterminismo”?
significa che si conosce l’ordine nel quale ogni thread eseguirà le sue istruzioni, ma l’ordine nel quale le istruzioni saranno eseguite effettivamente è ignoto
cos’è il main thread?
il thread che esegue il metodo main(), è un thread che è sempre in esecuzione.
Quand’ è che un programma termina del tutto?
quando tutti i thread (non solo il main thread) hanno finito la loro esecuzione.
quali sono i due modi per mettere in pausa un thread in java? Quale si deve usare e quale evitare?
1) Buisy Loop: da evitare
2) Thread.sleep: da usare
quali sono le caratteristiche del metodo sleep()?
1) non utilizza cicli di CPU
2) è un metodo statico della classe thread, quindi non si può mettere in sleep più di un thread alla volta.
3) mentre un thread è in sleep, può essere interrotto, ciò lancerebbe l’eccezzione InterruptedException
cosa restituisce il metodo statico CurrentThread()?
restituisce il thread corrente che sta eseguendo le istruzioni.
cosa è associato a ogni thread?
un nome
in che altro modo oltre alla classe thread posso usare i thread in java?
con l’interfaccia Runnable, che è implementata anche dalla classe thread.
come faccio a usare un thread che implementa l’interfaccia runnable?
devo “wrapparlo” all’interno di un’istanza della classe thread passandoglielo come parametro
class EsempioThread2 implements Runnable
thread1 = new Thread(newEsempioThread2( “thread1” ));
Cosa succede se uso System.exit()?
L’esecuzione finisce bruscamente, anche se alcuni thread devono ancora finire.
a cosa serve il metodo IsAlive()?
a vedere se un thread è alive.
a cosa serve il metodo join()?
ad attendere la terminazione del thread sul quale è chiamato.
a cosa serve il metodo stop()? Perché è stato deprecato?
il metodo stop() serve ad interrompere immediatamente un thread.
È stato deprecato perchè può portare ad avere dati corrotti e deadlock.
a cosa serve il metodo Thread.yield()?
a lasciare volontariamente il processore a un altro thread
descrivi il metodo interrupt()
il metodo interrupt è un metodo che quando viene chiamato setta un flag di interruzione nel metodo di destinazione e ritorna.
il thread può controllare il metodo può controllare se quel flag è settato, e in caso uscire.
I metodi che mettono in pausa un thread (wait, sleep…) controllano quel flag sia prima che durante la pausa
Se il flag risulta settato, allora viene lanciata una InterruptedException.
Dopo l’interruptedException il processo dovrebbe interromperis, ma non viene controllato, ci si affida al programmatore (uso break).
qual’ è il problema del metodo interrupt e come si risolve?
se il metodo interrotto non esegue mai i metodi di attesa, non funziona
si risolve facendo controllare periodicamente a un thread il suo stato di interruzione, coi metodi:
-isInterupted(): controlla il flag di interruzione senza resettarlo
-Thread.interrupted(): controlla il flag di interruzione del thread corrente e se settato lo resetta