Tuer Thread en Java
-
Tuer ou arrêter un thread en utilisant un drapeau
boolean
en Java -
Tue ou arrête un thread en utilisant
interrupt()
en Java
Les threads en Java nous permettent d’exécuter plusieurs tâches en parallèle, ce qui permet le multitâche. Nous pouvons créer un thread en Java en utilisant la classe Thread
. Dans cet article, nous allons présenter deux méthodes pour tuer un thread.
Bien que le fil soit détruit par la méthode run()
de la classe Thread
une fois qu’il a terminé toutes les tâches, il arrive parfois que nous voulions tuer ou arrêter un thread avant qu’il n’ait fini de s’exécuter complètement.
Tuer ou arrêter un thread en utilisant un drapeau boolean
en Java
Pour tuer explicitement un thread, nous pouvons utiliser un indicateur booléen pour avertir le thread quand arrêter la tâche. Ci-dessous, deux threads impriment une ligne avec son nom, puis les deux threads dorment pendant environ 100 millisecondes. Les threads sont exécutés jusqu’à ce que l’indicateur booléen exitThread
devienne vrai.
thread1
et thread2
sont deux threads créés, et un nom est passé comme argument dans les deux. Comme le constructeur de la classe ExampleThread
a thread.start()
qui démarre l’exécution d’un thread, les deux threads s’exécuteront. Nous pouvons voir que la sortie imprime les noms des deux threads de manière aléatoire car ils sont exécutés en parallèle.
Pour arrêter le thread, nous appellerons stopThread()
, qui est une méthode dans ExampleThread
qui définit exitThread
sur true
, et le thread s’arrête finalement car while(!exitThread)
devient 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;
}
}
Production :
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.
Tue ou arrête un thread en utilisant interrupt()
en Java
Nous utiliserons ici l’exemple précédent, mais avec une nouvelle méthode appelée interrupt()
. Cette fonction arrête l’exécution immédiatement lorsqu’elle est appelée sur un thread. Dans cet exemple, nous utilisons thread.isInterrupted()
pour vérifier si interrupt()
a été appelé.
Pour arrêter les deux threads, nous appellerons thread1.thread.interrupt()
et thread2.thread.interrupt()
, ce qui aura pour effet de terminer les threads.
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.");
}
}
Production :
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