[JAVA] synchronisierte Notizen

Wenn Sie sich den Code für das Refactoring ansehen Ich habe es mehrmals gesehen und etwas gefunden, das ich vergessen habe, also habe ich mir eine Notiz gemacht, damit ich es nicht vergesse.

Was ist synchronisiert?

synchronisiert bedeutet exklusive Kontrolle ,

Exklusive Kontrolle = Verhindert, dass mehrere Prozesse (oder Threads) gleichzeitig eingegeben werden

Es scheint.

Ausprobieren

Weil es nicht nur mit Worten gut kam Ich habe es direkt versucht.

Als Prämissenbild Es ist das Bild einer Familie, die nacheinander ein Bad nimmt. (Geben Sie nicht ein, bis eine Person fertig ist.)

"Hauptklasse mit Hauptmethode"

MainClass.java


public class MainClass {
    public static void main(String[] args) {
        Bathroom bathroom = new Bathroom();
        FamilyTread father = new FamilyTread(bathroom, "Vater");
        FamilyTread mother = new FamilyTread(bathroom, "Mutter");
        FamilyTread sister = new FamilyTread(bathroom, "Schwester");
        FamilyTread me = new FamilyTread(bathroom, "ich");

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

}

"Klasse für Familien, die" Thread "erben" "

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

}

"Eine Klasse, die von einer Familienklasse zur Arbeit gerufen wurde"

class Bathroom {
    void openDoor(String name) {
        System.out.println(name + ""Ich werde ein Bad nehmen!"");
        for (int count = 0; count < 100000; count++) {
            if (count == 1000) {
                System.out.println(name + ""Ich habe ein Bad genommen."");
            }
        }
        System.out.println(name + ""Ich bin aus dem Bad gestiegen!"");
    }
}
Ergebnis des mehrmaligen Laufens

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

Mein Vater nimmt immer noch ein Bad ...! Die Bestellung wurde durcheinander gebracht. (Es ist zufällig in der richtigen Reihenfolge)

Daher kann die Verwendung von "synchronisiert" verhindern, dass Sie gleichzeitig ein Bad (Faden) nehmen.

Versuchen Sie es mit synchronisiert

Ich habe "synchronized" zur "openDoor" -Methode der "Bathroom" -Klasse hinzugefügt.

class Bathroom {
    synchronized void openDoor(String name) {
        System.out.println(name + ""Ich werde ein Bad nehmen!"");
        for (int count = 0; count < 100000; count++) {
            if (count == 1000) {
                System.out.println(name + ""Ich habe ein Bad genommen."");
            }
        }
        System.out.println(name + ""Ich bin aus dem Bad gestiegen!"");
    }
}
Ergebnis

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

Sie können jetzt eins nach dem anderen eingeben!

Referenz

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

Recommended Posts

synchronisierte Notizen
JUnit 4 Notizen
Puzzle-Studiennotizen
Java Generics (Hinweise)
JavaFX-Studiennotizen
db verbindungshinweise
[Java] Array-Hinweis
Ruby Hash Notizen
Enum Review Memo
Docker-Studiennotizen
DDD persönliche Notizen
[Java] Studiennotizen
Graal verwandte Notizen
Hinweise zur Java-Serialisierung
HTML & Rails Memo