Programmazione multithreading in Java Flashcards

(19 cards)

1
Q

qual’ è la classe principale per i thread in java?

A

java.lang.Thread

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

cos’è il metodo run?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

cos’è il metodo start()?

A

il metodo che avverte la JVM che il thread è pronto per essere eseguito.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

cosa significa “nondeterminismo”?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

cos’è il main thread?

A

il thread che esegue il metodo main(), è un thread che è sempre in esecuzione.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Quand’ è che un programma termina del tutto?

A

quando tutti i thread (non solo il main thread) hanno finito la loro esecuzione.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

quali sono i due modi per mettere in pausa un thread in java? Quale si deve usare e quale evitare?

A

1) Buisy Loop: da evitare
2) Thread.sleep: da usare

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

quali sono le caratteristiche del metodo sleep()?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

cosa restituisce il metodo statico CurrentThread()?

A

restituisce il thread corrente che sta eseguendo le istruzioni.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

cosa è associato a ogni thread?

A

un nome

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

in che altro modo oltre alla classe thread posso usare i thread in java?

A

con l’interfaccia Runnable, che è implementata anche dalla classe thread.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

come faccio a usare un thread che implementa l’interfaccia runnable?

A

devo “wrapparlo” all’interno di un’istanza della classe thread passandoglielo come parametro

class EsempioThread2 implements Runnable

thread1 = new Thread(newEsempioThread2( “thread1” ));

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Cosa succede se uso System.exit()?

A

L’esecuzione finisce bruscamente, anche se alcuni thread devono ancora finire.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

a cosa serve il metodo IsAlive()?

A

a vedere se un thread è alive.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

a cosa serve il metodo join()?

A

ad attendere la terminazione del thread sul quale è chiamato.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

a cosa serve il metodo stop()? Perché è stato deprecato?

A

il metodo stop() serve ad interrompere immediatamente un thread.

È stato deprecato perchè può portare ad avere dati corrotti e deadlock.

17
Q

a cosa serve il metodo Thread.yield()?

A

a lasciare volontariamente il processore a un altro thread

18
Q

descrivi il metodo interrupt()

A

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).

19
Q

qual’ è il problema del metodo interrupt e come si risolve?

A

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