Résumé de «Modèles de conception appris en langage Java (édition multithread)» (partie 12)

javathread.jpeg

Modèle de terminaison biphasé

Le point est

Considérez un programme qui termine un thread qui compte à des intervalles d'environ 500 millisecondes après environ 10 secondes.

(Voir ce manuel pour le code complet)

Main.java


public class Main { 
    public static void main(String[] args) { 
        try { 
            CountupThread t = new CountupThread(); 
            t.start(); 
            Thread.sleep(10000); 
            t.shutdownRequest(); 
            t.join(); 
        } catch (InterruptedException e) { 
            e.printStackTrace(); 
        } 
    } 
}

CountupThread.java


public class CountupThread extends Thread { 
    private long counter = 0; 
    private volatile boolean shutdownRequested = false; 
 
    public void shutdownRequest() { 
        shutdownRequested = true; 
        interrupt(); 
    } 
 
    ... 

    public final void run() { 
        try { 
            while (!isShutdownRequested()) { 
                doWork(); 
            } 
        } catch (InterruptedException e) { 
        } finally { 
            doShutdown(); 
        } 
    } 
 
    private void doWork() throws InterruptedException { 
        counter++; 
        System.out.println("doWork: counter = " + counter); 
        Thread.sleep(500); 
    } 
 
    ... 
}

Personnage

Rôle du demandeur de résiliation Le rôle TerminationRequester émet une demande de terminaison au rôle Terminator. Dans l'exemple de programme, la classe Main a joué ce rôle.

Rôle de terminateur Le rôle Terminator reçoit la demande de terminaison et exécute réellement le traitement de terminaison. Le rôle Terminator fournit une méthode shutdownRequest qui représente une demande d'arrêt. Le rôle de terminateur a un indicateur (verrou) qui indique s'il a reçu ou non une demande de terminaison. Dans l'exemple de programme, la classe CountupThread a joué ce rôle.

Conseils pour élargir votre réflexion

N'utilisez pas la méthode stop de la classe Thread Avec stop, le thread se termine avec l'exception java.lang.ThreadDeath, même lorsque la section critique est en cours.

Le test de drapeau à lui seul ne suffit pas Est-il nécessaire d'appeler la ** méthode d'interruption ** dans la méthode shutdownRequest? L'indicateur shutdownRequest n'est-il pas seul? Avec uniquement l'indicateur shutdownRequested, par exemple, si le thread est en veille, peu importe à quel point l'indicateur est défini sur true, le processus d'arrêt ne démarre pas. Il peut démarrer le processus d'arrêt après le temps de sommeil, mais cela le rend moins réactif. Vous pouvez utiliser la méthode d'interruption pour interrompre le sommeil et attendre.

Les tests d'état interrompus seuls ne suffisent pas Au contraire, il ne suffit pas d'appeler cette fois la méthode d'interruption? Par exemple, si vous écrivez ce qui suit dans la méthode doWork que le thread exécute, cela ne fonctionnera pas.

    private void doWork() throws InterruptedException { 
        counter++; 
        System.out.println("doWork: counter = " + counter);
        try { 
            Thread.sleep(500);
        } catch (InterruptedException e) {
        } 
    }

À propos de la méthode d'interruption ** Vous pourriez penser que lorsque vous appelez la méthode d'interruption, le thread cible lève toujours une InterruptedException, ce qui est un malentendu. Une méthode appelée interruption ne modifie que l'état d'interruption d'un thread. L'état interrompu est un état qui indique si un thread est interrompu ou non. sleep, wait et join throw InterruptedExcpetion car ils vérifient l'état interrompu du thread dans la méthode et lancent explicitement une InterruptedException. Une fois qu'une InterruptedException est lancée avec wait, sleep, join, le thread n'est plus dans un état interrompu. ** **


Relation Résumé de «Modèles de conception appris en langage Java (édition multithread)» (Partie 1) Résumé de «Modèles de conception appris en langage Java (édition multithread)» (Partie 2) Résumé de «Modèles de conception appris en langage Java (édition multithread)» (Partie 3) Résumé de «Modèles de conception appris en langage Java (édition multithread)» (Partie 4) Résumé de «Modèles de conception appris en langage Java (édition multithread)» (Partie 5) Résumé de «Modèles de conception appris en langage Java (édition multithread)» (Partie 6) Résumé de «Modèles de conception appris en langage Java (édition multithread)» (Partie 7) Résumé de «Modèles de conception appris en langage Java (édition multi-thread)» (Partie 8) Résumé de «Modèles de conception appris en langage Java (édition multi-thread)» (Partie 9) Résumé de «Modèles de conception appris en langage Java (édition multithread)» (Partie 10) Résumé de «Modèles de conception appris en langage Java (édition multithread)» (Partie 11)

Recommended Posts

Résumé de «Modèles de conception appris en langage Java (édition multithread)» (partie 10)
Résumé de «Modèles de conception appris en langage Java (édition multithread)» (partie 7)
Résumé de «Modèles de conception appris en langage Java (édition multithread)» (partie 3)
Résumé de «Modèles de conception appris en langage Java (édition multithread)» (partie 9)
Résumé de «Modèles de conception appris en langage Java (édition multithread)» (partie 6)
Résumé de «Modèles de conception appris en langage Java (édition multithread)» (partie 4)
Résumé de «Modèles de conception appris en langage Java (édition multithread)» (Partie 5)
Résumé de «Modèles de conception appris en langage Java (édition multithread)» (partie 2)
Résumé de «Modèles de conception appris en langage Java (édition multi-thread)» (Partie 1)
Résumé de «Modèles de conception appris en langage Java (édition multithread)» (partie 12)
Résumé de «Modèles de conception appris en langage Java (édition multithread)» (partie 8)
[Java] Résumé des modèles de conception
Un examen rapide de Java appris en classe part4
Résumé des bases du langage Java
Un examen rapide de Java appris en classe part3
Un examen rapide de Java appris en classe part2
J'ai lu Hiroshi Yuki "Introduction aux modèles de conception appris en langage Java" (SB Creative)
Un examen rapide de Java appris en classe
Résumé de ce que j'ai appris dans Spring Batch
Essayez les modèles de conception en langage C! Modèle de souvenir - mémorisons les souvenirs des données
[Java] Résumé de base de Java non couvert par Progate ~ Partie 1 ~
Ce que j'ai appris en Java (partie 3) Déclaration d'exécution des instructions
Résumé de la mise en œuvre des arguments par défaut en Java
Résumé du support Java 2018
Résumé du modèle de conception Java
Ce que j'ai appris en Java (partie 4) Branchement conditionnel et répétition
Road to Java Engineer Part2 Quel type de langage est Java?
[Java11] Résumé du flux -Avantages du flux-
[Java] Résumé des expressions régulières
[Java] Résumé des opérateurs (opérateur)
Résumé de la classe Java Math
[Java] Résumé de la syntaxe de contrôle
Implémentation Java de tri-tree
Résumé du traitement des erreurs Java
[Java] Résumé des opérations mathématiques
[Pour les débutants] Résumé du constructeur java
Utilisation de base de Java Facultatif Partie 1
processus thread-safe en java
Résumé de l'algorithme AtCoder 400 points (édition Java)
Liste des membres ajoutés dans Java 9
Liste des types ajoutés dans Java 9
Résumé de la programmation orientée objet utilisant Java
Implémentation d'une fonction similaire en Java
Création d'une analyse de phrase dans Java 8 (partie 1)