Uccidi thread in Java
-
Elimina o interrompi un thread utilizzando un flag
booleano
in Java -
Uccidi o interrompi un thread usando
interrupt()
in Java
I thread in Java ci consentono di eseguire diverse attività in parallelo, il che consente il multitasking. Possiamo creare un thread in Java usando la classe Thread
. In questo articolo, introdurremo due metodi per uccidere un thread.
Sebbene il thread venga distrutto dal metodo run()
della classe Thread
una volta che ha completato tutti i compiti, a volte potremmo voler uccidere o fermare un thread prima che abbia terminato completamente l’esecuzione.
Elimina o interrompi un thread utilizzando un flag booleano
in Java
Per terminare esplicitamente un thread, possiamo utilizzare un flag booleano per notificare al thread quando interrompere l’attività. Sotto, due thread stampano una riga con il suo nome, quindi entrambi i thread dormono per circa 100 millisecondi. I thread vengono eseguiti fino a quando il flag booleano exitThread
diventa vero.
thread1
e thread2
sono due thread creati e in entrambi viene passato un nome come argomento. Poiché il costruttore della classe ExampleThread
ha thread.start()
che avvia l’esecuzione di un thread, entrambi i thread verranno eseguiti. Possiamo vedere che l’output stampa i nomi di entrambi i thread in modo casuale perché vengono eseguiti parallelamente.
Per fermare il thread, chiameremo stopThread()
, che è un metodo in ExampleThread
che imposta exitThread
su true
, e il thread alla fine si ferma perché while(!exitThread)
diventa false
.
public class KillThread {
public static void main(String[] args) {
ExampleThread thread1 = new ExampleThread("Thread One");
ExampleThread thread2 = new ExampleThread("Thread Two");
try {
Thread.sleep(500);
thread1.stopThread();
thread2.stopThread();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("**Exiting the main Thread**");
}
}
class ExampleThread implements Runnable {
private String name;
private boolean exitThread;
Thread thread;
ExampleThread(String name) {
this.name = name;
thread = new Thread(this, name);
System.out.println("Created Thread: " + thread);
exitThread = false;
thread.start();
}
@Override
public void run() {
while (!exitThread) {
System.out.println(name + " is running");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(name + " has been Stopped.");
}
public void stopThread() {
exitThread = true;
}
}
Produzione:
Created Thread: Thread[Thread One,5,main]
Created Thread: Thread[Thread Two,5,main]
Thread Two is running
Thread One is running
Thread Two is running
Thread One is running
Thread One is running
Thread Two is running
Thread One is running
Thread Two is running
Thread One is running
Thread Two is running
**Exiting the main Thread**
Thread Two has been Stopped.
Thread One has been Stopped.
Uccidi o interrompi un thread usando interrupt()
in Java
Useremo qui l’esempio precedente, ma con un nuovo metodo chiamato interrupt()
. Questa funzione interrompe immediatamente l’esecuzione quando viene chiamata su un thread. In questo esempio, stiamo usando thread.isInterrupted()
per controllare se interrupt()
è stato chiamato.
Per fermare entrambi i thread, chiameremo thread1.thread.interrupt()
e thread2.thread.interrupt()
con la conseguente terminazione dei thread.
public class KillThread {
public static void main(String[] args) {
ExampleThread thread1 = new ExampleThread("Thread One");
ExampleThread thread2 = new ExampleThread("Thread Two");
try {
Thread.sleep(6);
thread1.thread.interrupt();
thread2.thread.interrupt();
Thread.sleep(8);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("**Exiting the main Thread**");
}
}
class ExampleThread implements Runnable {
private String name;
Thread thread;
ExampleThread(String name) {
this.name = name;
thread = new Thread(this, name);
System.out.println("Created Thread: " + thread);
thread.start();
}
@Override
public void run() {
while (!thread.isInterrupted()) {
System.out.println(name + " is running");
}
System.out.println(name + " has been Stopped.");
}
}
Produzione:
Created Thread: Thread[Thread One,5,main]
Created Thread: Thread[Thread Two,5,main]
Thread One is running
Thread Two is running
Thread One has been Stopped.
Thread Two has been Stopped.
**Exiting the main Thread**
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn