Maison  >  Article  >  Java  >  Comment arrêter de terminer le thread en Java ?

Comment arrêter de terminer le thread en Java ?

PHPz
PHPzoriginal
2024-04-11 14:33:02832parcourir

Il existe quatre méthodes pour arrêter et terminer un thread en Java : Méthode interruption() : interrompre le thread et lever une exception InterruptedException. Méthode stop() : non recommandée car elle arrête le thread immédiatement, ce qui peut entraîner une perte de données. Définir un indicateur d'interruption : définissez un indicateur pour que le thread interroge afin de déterminer s'il doit être terminé. Utilisation de join() : bloque le thread actuel jusqu'à ce que le thread appelant join() depuis un autre thread se termine.

Comment arrêter de terminer le thread en Java ?

Comment arrêter de terminer les threads en Java

En Java, les threads peuvent être terminés de plusieurs manières. Comprendre comment terminer correctement les threads est essentiel pour garantir la stabilité et les performances des applications. Cet article abordera les méthodes courantes d'arrêt et de terminaison des threads, avec des cas pratiques joints.

Méthode 1 : méthode interrupt()

La méthode interrupt() peut être utilisée pour interrompre l'exécution d'un thread. Si le thread est en veille ou attend des E/S, vous recevrez une exception InterruptedException. Dans le cas pratique suivant, nous utilisons la méthode interrupt() pour arrêter un thread en veille : 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(); // 等待线程终止
    }
}

Sortie :

rrreee

Méthode 2 : méthode stop() 🎜🎜Non recommandé stop( ), car elle arrête immédiatement le thread, ce qui peut entraîner une perte de données ou une instabilité de l'application. Il est fortement recommandé d'utiliser plutôt la méthode interrupt(). 🎜🎜Méthode 3 : définir un indicateur d'interruption🎜🎜Vous pouvez définir un indicateur d'interruption pour que les threads soient interrogés. Lorsque cet indicateur est défini sur true, le thread sait qu'il doit se terminer : 🎜rrreee🎜Méthode 4 : Utiliser Join🎜🎜La méthode join() peut être utilisée pour s'arrêter et attendre que le thread se termine . Il bloquera le thread actuel jusqu'à ce qu'un autre thread qui appelle join() se termine. 🎜rrreee🎜Cela bloque le fil de discussion actuel pendant 10 secondes jusqu'à ce que l'autre fil de discussion se termine. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn