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.
synchronized
signifie contrôle exclusif ,
Contrôle exclusif = Empêcher plusieurs processus (ou threads) d'entrer en même temps
Il semble.
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!"");
}
}
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.
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!"");
}
}
Vous pouvez maintenant entrer un par un!
http://www.techscore.com/tech/Java/JavaSE/Thread/3/
Recommended Posts