Maison  >  Article  >  Java  >  Comment contrôler les threads en Java : démarrage, arrêt et redémarrage ?

Comment contrôler les threads en Java : démarrage, arrêt et redémarrage ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-01 12:36:02747parcourir

How to Control Threads in Java: Starting, Stopping, and Restarting?

Contrôle des threads en Java : démarrage, arrêt et redémarrage

Démarrer un thread est aussi simple que de créer une instance de la classe Thread et appeler la méthode start(). Le thread exécutera ensuite le code dans sa méthode run().

Arrêter un thread, cependant, n'est pas aussi simple. Une fois qu’un thread est démarré, il n’existe aucun moyen direct de l’arrêter. Au lieu de cela, vous pouvez utiliser des techniques pour avertir le thread qu'il doit cesser de s'exécuter.

Une approche courante consiste à utiliser un indicateur booléen pour indiquer si le thread doit continuer à s'exécuter. Dans la méthode run() du thread, vous pouvez vérifier régulièrement l'indicateur et terminer l'exécution lorsqu'il est défini sur false.

<code class="java">// Task.java

private boolean isRunning = true;

@Override
public void run() {
    while (isRunning) {
        // Perform tasks here
    }
}

public void stop() {
    isRunning = false;
}</code>

Redémarrage d'un thread

Redémarrage un thread signifie créer une nouvelle instance de la classe Thread et la démarrer. En effet, les threads ne peuvent pas être réutilisés une fois arrêtés. Cependant, il est important de noter que les données ou les états conservés par le fil de discussion d'origine ne seront pas transférés vers le nouveau fil de discussion.

Option 1 : Créer un nouveau fil de discussion

<code class="java">Thread taskThread = new Thread(new Task());
taskThread.start();

// Later, to restart the thread...
taskThread = new Thread(new Task());
taskThread.start();</code>

Option 2 : Notifier et redémarrer

<code class="java">// Task.java

private Object lock = new Object();

@Override
public void run() {
    while (true) {
        synchronized (lock) {
            if (shouldStop) {
                try {
                    lock.wait();
                } catch (InterruptedException e) {}
            }
        }
        // Perform tasks here
    }
}

public void stop() {
    synchronized (lock) {
        shouldStop = true;
        lock.notify();
    }
}

public void restart() {
    synchronized (lock) {
        shouldStop = false;
        lock.notify();
    }
}</code>

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