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

javathread.jpeg

Motif de rechute

** hésiter ** signifie s'arrêter et rentrer à la maison. Le boke de baseball est également hésitant. Semblable au modèle de suspension gardée, le modèle de Balking a également des ** conditions de garde **. Dans le modèle Balking, si la condition de garde n'est pas remplie, elle sera immédiatement interrompue. Ceci est différent du modèle de suspension protégée, qui attend d'être prêt à fonctionner.

Pensez à quelque chose comme la fonction d'enregistrement automatique d'un éditeur. Il existe un thread qui écrit périodiquement le contenu des données actuelles dans un fichier. Enregistrez uniquement lorsque le contenu des données est mis à jour. La condition de garde est qu'il y a une différence dans le contenu des données, et s'il n'y a pas de différence, il retourne (refus) sans écrire dans le fichier.

(Voir ce manuel pour le code complet)

...
    public synchronized void change(String newContent) { 
        content = newContent; 
        changed = true; 
    } 
 
    public synchronized void save() throws IOException { 
        if (!changed) { //Si non changé
            return; //hésiter
        } 
        doSave(); 
        changed = false; 
    }
...

Personnage

Le rôle GuardedObject est une classe qui a une méthode protégée. Si la condition de garde est remplie, elle sera exécutée immédiatement, et si elle n'est pas remplie, elle reviendra sans passer au traitement réel. Le rôle GuardedObjec peut avoir un stateChangingMethod qui modifie l'état de l'instance. Dans l'exemple de programme, la classe Data joue ce rôle, la méthode de sauvegarde correspond à guardedMethod et le champ de modification correspond à stateChangingMethod.

Quand utiliser

--Quand il n'y a pas besoin de traitement --Si vous ne voulez pas attendre que les conditions de garde soient remplies

...
    public synchronized void init() { 
        if (initialized) { 
            return; 
        } 
        doInit(); 
        initialized = true; 
    }

Une "variable dont l'état ne change qu'une seule fois", comme un champ initialisé, est généralement appelée un ** verrou ** (verrou).

temps libre

En tant qu'intermédiaire entre le modèle Balking et le modèle Guarded Suspension, il existe une solution de contournement qui ** attend pendant un certain temps jusqu'à ce que la condition de garde soit remplie **. Le processus consistant à attendre pendant un certain temps jusqu'à ce que la condition de garde soit satisfaite, puis à marcher lorsque la condition n'est pas satisfaite est appelé ** chronométré gardé ** ou ** timeout **.

    obj.wait(1000) //Attendez 1000 millisecondes

Cependant, Java n'a aucun moyen de faire la distinction entre ** notifier / notifierAll et expirer **.


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 multi-thread)» (Partie 4) Résumé de "Modèles de conception appris en langage Java (édition multi-thread)" (Partie 5)

Recommended Posts

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 11)
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)
Modèles de conception Java
Ce que j'ai appris en Java (partie 2) Que sont les variables?
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
[Java] Résumé de base de Java non couvert par Progate ~ Partie 2 ・ Liste ~
Road to Java Engineer Part2 Quel type de langage est Java?
[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
Ce que j'ai appris en Java (partie 1) Flux de développement Java et présentation
Résumé de l'ORM "uroboroSQL" qui peut être utilisé dans le Java d'entreprise
[Pour les débutants] Résumé du constructeur java
Résumé du package [Java Silver Study]
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
Faire une analyse de phrase en Java 8 (partie 2)
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)