Thread in Java beenden

Rupam Yadav 12 Oktober 2023
  1. Beenden oder Anhalten eines Threads mit einem boolean Flag in Java
  2. Einen Thread mit interrupt() in Java beenden oder anhalten
Thread in Java beenden

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 Yadav avatar Rupam Yadav avatar

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

Verwandter Artikel - Java Thread