Heim  >  Artikel  >  Java  >  Wie kann ich das Beenden eines Threads in Java stoppen?

Wie kann ich das Beenden eines Threads in Java stoppen?

PHPz
PHPzOriginal
2024-04-11 14:33:02832Durchsuche

Es gibt vier Methoden zum Stoppen und Beenden eines Threads in Java: Interrupt()-Methode: Unterbricht den Thread und löst eine InterruptedException-Ausnahme aus. stop()-Methode: Nicht empfohlen, da sie den Thread sofort stoppt, was möglicherweise zu Datenverlust führt. Interrupt-Flag setzen: Legen Sie ein Flag fest, damit der Thread abfragt, ob er beendet werden muss. Verwenden von join(): Blockiert den aktuellen Thread, bis der Thread, der join() von einem anderen Thread aus aufruft, beendet wird.

Wie kann ich das Beenden eines Threads in Java stoppen?

So stoppen Sie das Beenden von Threads in Java

In Java können Threads auf viele Arten beendet werden. Um die Stabilität und Leistung der Anwendung sicherzustellen, ist es wichtig zu verstehen, wie Threads ordnungsgemäß beendet werden. In diesem Artikel werden gängige Methoden zum Stoppen und Beenden von Threads erläutert und praktische Beispiele angehängt.

Methode 1: interrupt()-Methode

interrupt()-Methode kann verwendet werden, um die Ausführung eines Threads zu unterbrechen. Wenn der Thread schläft oder auf E/A wartet, erhalten Sie eine InterruptedException-Ausnahme. Im folgenden praktischen Fall verwenden wir die Methode interrupt(), um einen schlafenden Thread zu stoppen: interrupt() 方法可用于中断线程的执行。如果线程正在休眠或等待I/O,则会收到一个 InterruptedException 异常。在以下实战案例中,我们使用 interrupt() 方法来停止一个正在休眠的线程:

public class InterruptThreadExample {

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(() -> {
            try {
                Thread.sleep(10000); // 睡 10 秒
            } catch (InterruptedException e) {
                System.out.println("已中断!");
            }
        });

        thread.start();
        Thread.sleep(1000); // 睡 1 秒

        thread.interrupt();
        thread.join(); // 等待线程终止
    }
}

输出:

已中断!

方法 2:stop() 方法

不推荐使用 stop() 方法,因为它会立即停止线程,可能导致数据丢失或应用程序不稳定。强烈建议使用 interrupt() 方法代替。

方法 3:设置中断标志

您可以设置一个中断标志,供线程轮询。当该标志设为 true 时,线程知道它应该终止:

public class InterruptFlagExample {

    private volatile boolean interrupted = false;

    public static void main(String[] args) throws InterruptedException {
        InterruptFlagExample example = new InterruptFlagExample();

        Thread thread = new Thread(() -> {
            while (!example.isInterrupted()) {
                // 做一些事情
            }
        });

        thread.start();
        Thread.sleep(1000); // 睡 1 秒

        example.setInterrupted(true);
        thread.join(); // 等待线程终止
    }

    public void setInterrupted(boolean interrupted) {
        this.interrupted = interrupted;
    }

    public boolean isInterrupted() {
        return interrupted;
    }
}

方法 4:使用 Join

join() 方法可以用来停止和等待线程终止。它将阻塞当前线程,直到另一个线程调用了 join()

public class JoinExample {

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(() -> {
            try {
                Thread.sleep(10000); // 睡 10 秒
            } catch (InterruptedException e) {}
        });

        thread.start();
        thread.join(); // 等待线程终止
    }
}

Ausgabe:

rrreee

Methode 2: stop()-Methode 🎜🎜Nicht empfohlener stop( )-Methode, da sie den Thread sofort stoppt, was möglicherweise zu Datenverlust oder Anwendungsinstabilität führt. Es wird dringend empfohlen, stattdessen die Methode interrupt() zu verwenden. 🎜🎜Methode 3: Interrupt-Flag setzen🎜🎜Sie können ein Interrupt-Flag für abzufragende Threads festlegen. Wenn dieses Flag auf „true“ gesetzt ist, weiß der Thread, dass er beendet werden soll: 🎜rrreee🎜Methode 4: Join verwenden🎜🎜Mit der Methode join() können Sie anhalten und auf die Beendigung des Threads warten . Es blockiert den aktuellen Thread, bis ein anderer Thread, der join() aufruft, beendet wird. 🎜rrreee🎜Dadurch wird der aktuelle Thread für 10 Sekunden blockiert, bis der andere Thread beendet wird. 🎜

Das obige ist der detaillierte Inhalt vonWie kann ich das Beenden eines Threads in Java stoppen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn