** 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;
}
...
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 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).
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