[JAVA] notes synchronisées

Si vous regardez le code pour la refactorisation Je l'ai vu plusieurs fois et j'ai trouvé quelque chose que j'avais oublié, alors j'ai pris une note pour ne pas l'oublier.

Qu'est-ce qui est synchronisé?

synchronized signifie contrôle exclusif ,

Contrôle exclusif = Empêcher plusieurs processus (ou threads) d'entrer en même temps

Il semble.

Essaie

Parce que ça ne s'est pas bien passé avec juste des mots Je l'ai essayé directement.

Comme image de prémisse C'est l'image d'une famille prenant un bain un par un. (N'entrez pas avant qu'une personne n'ait terminé.)

"Classe principale avec méthode principale"

MainClass.java


public class MainClass {
    public static void main(String[] args) {
        Bathroom bathroom = new Bathroom();
        FamilyTread father = new FamilyTread(bathroom, "père");
        FamilyTread mother = new FamilyTread(bathroom, "mère");
        FamilyTread sister = new FamilyTread(bathroom, "sœur");
        FamilyTread me = new FamilyTread(bathroom, "je");

        father.start();
        mother.start();
        sister.start();
        me.start();
    }

}

"Classe pour les familles héritant de" Thread "" "

FamilyTread.java


class FamilyTread extends Thread {
    private Bathroom mBathroom;
    private String mName;

    FamilyTread(Bathroom bathroom, String name) {
        this.mBathroom = bathroom;
        this.mName = name;
    }

    public void run() {
        mBathroom.openDoor(mName);
    }

}

"Une classe appelée par une classe familiale pour travailler"

class Bathroom {
    void openDoor(String name) {
        System.out.println(name + ""Je vais prendre un bain!"");
        for (int count = 0; count < 100000; count++) {
            if (count == 1000) {
                System.out.println(name + ""J'ai pris un bain."");
            }
        }
        System.out.println(name + ""Je suis sorti du bain!"");
    }
}
Résultat de l'exécution plusieurs fois

スクリーンショット 2016-12-12 17.17.56.png

Mon père prend toujours un bain ...! L'ordre a été foiré. (Il se trouve que c'est dans le bon ordre)

Par conséquent, l'utilisation de synchronized peut vous empêcher de prendre un bain (thread) en même temps.

Essayez d'utiliser synchronisé

J'ai ajouté synchronized à la méthode ʻopenDoor de la classe Bathroom`.

class Bathroom {
    synchronized void openDoor(String name) {
        System.out.println(name + ""Je vais prendre un bain!"");
        for (int count = 0; count < 100000; count++) {
            if (count == 1000) {
                System.out.println(name + ""J'ai pris un bain."");
            }
        }
        System.out.println(name + ""Je suis sorti du bain!"");
    }
}
résultat

スクリーンショット 2016-12-12 17.30.31.png

Vous pouvez maintenant entrer un par un!

référence

http://www.techscore.com/tech/Java/JavaSE/Thread/3/

Recommended Posts

notes synchronisées
JUnit 4 notes
Notes d'étude de puzzle
Génériques Java (Notes)
Notes d'étude JavaFX
notes de connexion à la base de données
[Java] Note sur le tableau
Notes de Ruby Hash
Note de révision Enum
Notes d'étude Docker
Notes personnelles DDD
[Java] Notes d'étude
Notes relatives à Graal
Notes de sérialisation Java
mémo html & rails