Thread in Java beenden
-
Beenden oder Anhalten eines Threads mit einem
boolean
Flag in Java -
Einen Thread mit
interrupt()
in Java beenden oder anhalten
Threads in Java ermöglichen es uns, mehrere Aufgaben parallel laufen zu lassen, was Multitasking ermöglicht. Wir können einen Thread in Java mithilfe der Klasse Thread
erstellen. In diesem Artikel werden wir zwei Methoden zum Beenden eines Threads vorstellen.
Obwohl der Thread durch die Methode run()
der Klasse Thread
zerstört wird, sobald er alle Aufgaben erledigt hat, möchten wir manchmal einen Thread beenden oder anhalten, bevor er vollständig ausgeführt wurde.
Beenden oder Anhalten eines Threads mit einem boolean
Flag in Java
Um einen Thread explizit zu beenden, können wir ein boolesches Flag verwenden, um dem Thread mitzuteilen, wann er die Aufgabe beenden soll. Im Folgenden geben zwei Threads eine Zeile mit ihrem Namen aus, und dann schlafen beide Threads für etwa 100 Millisekunden. Die Threads werden ausgeführt, bis das boolesche Flag exitThread
wahr wird.
Thread1
und Thread2
sind zwei erstellte Threads, und in beiden wird ein Name als Argument übergeben. Da der Konstruktor der Klasse ExampleThread
über thread.start()
verfügt, der die Ausführung eines Threads startet, werden beide Threads ausgeführt. Wir können sehen, dass die Ausgabe die Namen beider Threads zufällig ausgibt, da sie parallel ausgeführt werden.
Um den Thread zu stoppen, rufen wir stopThread()
auf, was eine Methode in ExampleThread
ist, die exitThread
auf true
setzt, und der Thread stoppt schließlich, weil while(!exitThread)
zu false
wird.
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;
}
}
Ausgabe:
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.
Einen Thread mit interrupt()
in Java beenden oder anhalten
Wir werden hier das vorherige Beispiel verwenden, aber mit einer neuen Methode namens interrupt()
. Diese Funktion stoppt die Ausführung sofort, wenn sie auf einem Thread aufgerufen wird. In diesem Beispiel verwenden wir thread.isInterrupted()
, um zu prüfen, ob interrupt()
aufgerufen wurde.
Um beide Threads anzuhalten, rufen wir thread1.thread.interrupt()
und thread2.thread.interrupt()
auf, was zur Beendigung der Threads führt.
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.");
}
}
Ausgabe:
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