Zusammenfassung von "In Java gelernte Entwurfsmuster (Multithread Edition)" (Teil 4)

javathread.jpeg

Unveränderliches Muster

Die String-Klasse bietet keine Methode zum Ändern des Inhalts eines Strings. Der Inhalt der Zeichenfolge, die von der Zeichenfolgeninstanz dargestellt wird, ändert sich nie. Aus diesem Grund müssen die Methoden der String-Klasse nicht synchronisiert werden. ** Unveränderlich ** bedeutet "unveränderlich" oder "unverändert". Im unveränderlichen Muster wird eine Klasse (** unveränderliche Klasse **) angezeigt, die garantiert, dass sich der Status der Instanz nicht ändert. Da keine ausschließliche Kontrolle erforderlich ist, kann bei guter Verwendung eine Leistungsverbesserung erwartet werden.

(Den gesamten Code finden Sie in diesem Handbuch.)

public final class Person {
    private final String name;
    private final String hobby;

    public Person(String name, String hobby) {
        this.name = name;
        this.hobby = hobby;
    }

    public String getName() {
        return name;
    }

    public String getHobby() {
        return hobby;
    }
}

In dieser Klasse kann der Wert des Feldes der Person-Klasse nur im Konstruktor festgelegt werden. Es gibt auch keine Methode, um den Wert des Feldes zu ändern. Sobald eine Instanz der Person-Klasse erstellt wurde, ändert sich der Wert des Felds daher nicht. Zu diesem Zeitpunkt ist die Person-Klasse auch dann sicher, wenn von mehreren Threads gleichzeitig auf sie zugegriffen wird. Keine der Methoden muss synchronisiert werden.

Zeichenabschnitt

** Unveränderliche Rolle ** erscheint. Die Rolle "Unveränderlich" ist eine Klasse, die den Wert eines Felds nicht ändern kann und über keine Methode zum Ändern des Feldinhalts verfügt.

Wann zu verwenden

--Wenn sich der Status nach dem Erstellen der Instanz nicht ändert. Es ist die folgende Zeit. ** Das Feld ist endgültig, die Setter-Methode existiert nicht und die Instanz, auf die das Feld verweist, ändert sich nicht **.

Beachten Sie, dass die folgenden Klassen nicht unveränderlich sind.

public final class Hoge {
     private final StringBuffer hoge;

     public Hoge(String a, String b) {
         this.hoge = new StringBuffer("a=" + a + ", b=" + b);
     }

     public StringBuffer getHoge() {
         return hoge;
     }
}

Die Instanz, die das von der getHoge-Methode erhaltene hoge-Feld hat, ist kein String, sondern eine Instanz von StringBuffer. Da die StringBuffer-Klasse über eine Methode zum Ändern des internen Status verfügt, kann der Inhalt des Hoge-Felds von außen neu geschrieben werden. Da das Hoge-Feld als endgültig deklariert wird, ändert sich der Wert des Felds selbst nicht, aber der Status der Instanz, auf die das Feld (als Zeiger betrachtet) zeigt, kann sich ändern.

veränderliche Klasse und immuatble Klasse

Einige Java-Standardklassenbibliotheken verfügen über ein Paar veränderbarer und unveränderlicher Klassen. Zum Beispiel die Klassen StringBuffer und String. StringBuffer wird beim Umschreiben ordnungsgemäß synchronisiert. Andererseits verwendet die String-Klasse nicht Synchronized, sodass eine Hochgeschwindigkeitsreferenz möglich ist. Verwenden Sie StringBuffer, wenn Sie den Inhalt häufig ändern möchten, und verwenden Sie String, wenn Sie den Inhalt nicht ändern und nur darauf verweisen müssen.

Zum Schutz der Unveränderlichkeit

Wenn die Synchronisierung unter der Annahme entfernt wird, dass es sich um ein unveränderliches Muster handelt, geht die Sicherheit der Klasse verloren, sobald die Unveränderlichkeit verloren geht. Daher sollte die Unveränderlichkeit in den Programmkommentaren und in der API-Dokumentation klar angegeben werden.


Beziehung Zusammenfassung der in Java-Sprache erlernten Entwurfsmuster (Multi-Thread-Edition) "(Teil 1) Zusammenfassung der in Java-Sprache erlernten Entwurfsmuster (Multithreaded Edition) "(Teil 2) Zusammenfassung der in Java-Sprache erlernten Entwurfsmuster (Multithread Edition) "(Teil 3)

Recommended Posts

Zusammenfassung von "In Java gelernten Entwurfsmustern (Multithread Edition)" (Teil 10)
Zusammenfassung von "In Java gelernten Entwurfsmustern (Multithread Edition)" (Teil 7)
Zusammenfassung von "In Java gelernte Entwurfsmuster (Multithread Edition)" (Teil 3)
Zusammenfassung von "In Java gelernten Entwurfsmustern (Multithread Edition)" (Teil 6)
Zusammenfassung von "In Java gelernte Entwurfsmuster (Multithread Edition)" (Teil 4)
Zusammenfassung von "In Java gelernten Entwurfsmustern (Multithread Edition)" (Teil 5)
Zusammenfassung von "In Java gelernten Entwurfsmustern (Multithread Edition)" (Teil 2)
Zusammenfassung von "In Java-Sprache erlernte Entwurfsmuster (Multi-Thread-Edition)" (Teil 1)
Zusammenfassung von "In Java gelernten Entwurfsmustern (Multithread Edition)" (Teil 11)
Zusammenfassung von "In Java gelernten Entwurfsmustern (Multithread Edition)" (Teil 12)
Zusammenfassung von "In Java gelernten Entwurfsmustern (Multithread Edition)" (Teil 8)
[Java] Zusammenfassung der Entwurfsmuster
Ein kurzer Überblick über Java, das in Klasse 4 gelernt wurde
Zusammenfassung der Grundlagen der Java-Sprache
Ein kurzer Überblick über Java, das in Klasse 3 gelernt wurde
Ein kurzer Überblick über Java, das in Klasse 2 gelernt wurde
Ich las Hiroshi Yuki "Einführung in Designmuster, die in Java gelernt wurden" (SB Creative)
Java-Entwurfsmuster
Was ich in Java gelernt habe (Teil 2) Was sind Variablen?
Ein kurzer Überblick über Java, das im Unterricht gelernt wurde
Zusammenfassung dessen, was ich in Spring Batch gelernt habe
Probieren Sie Designmuster in C-Sprache aus! Erinnerungsmuster - merken wir uns die Speicher der Daten
[Java] Grundlegende Zusammenfassung von Java, die nicht von Progate abgedeckt wird ~ Teil 1 ~
Was ich in Java gelernt habe (Teil 3) Anweisung zur Ausführung von Anweisungen
Zusammenfassung der Implementierung von Standardargumenten in Java
Zusammenfassung der Java-Unterstützung 2018
Zusammenfassung des Java-Entwurfsmusters
Was ich in Java gelernt habe (Teil 4) Bedingte Verzweigung und Wiederholung
[Java] Grundlegende Zusammenfassung von Java, die nicht von Progate abgedeckt wird ~ Teil 2 ・ Liste ~
Road to Java Engineer Part2 Was für eine Sprache ist Java?
[Java11] Stream-Zusammenfassung - Vorteile von Stream -
[Java] Zusammenfassung der regulären Ausdrücke
[Java] Zusammenfassung der Operatoren (Operator)
Zusammenfassung der Java Math Klasse
[Java] Zusammenfassung der Steuerungssyntax
Java-Implementierung von Tri-Tree
Zusammenfassung der Java-Fehlerverarbeitung
[Java] Zusammenfassung der mathematischen Operationen
Was ich in Java gelernt habe (Teil 1) Java-Entwicklungsablauf und Überblick
Zusammenfassung von ORM "uroboroSQL", das in Enterprise Java verwendet werden kann
[Für Anfänger] Zusammenfassung des Java-Konstruktors
Zusammenfassung des Pakets [Java Silver Study]
Grundlegende Verwendung von Java Optionaler Teil 1
Thread-sicherer Prozess in Java-Sprache
AtCoder 400 Punkte Algorithmus Zusammenfassung (Java Edition)
Liste der in Java 9 hinzugefügten Mitglieder
Führen Sie eine Phrasenanalyse in Java 8 durch (Teil 2).
Liste der in Java 9 hinzugefügten Typen
Zusammenfassung der objektorientierten Programmierung mit Java
Implementierung einer ähnlichen Funktion in Java
Erstellen einer Phrasenanalyse in Java 8 (Teil 1)