Heim > Java > javaLernprogramm > Hauptteil

Veränderbare und unveränderliche Java DateTime API

WBOY
Freigeben: 2024-08-21 22:38:02
Original
457 Leute haben es durchsucht

Mutable & Immutable Java DateTime API

Veränderbare DateTime-Klassen

Im java.util-Paket sind viele Klassen veränderbar, was bedeutet, dass sich ihr interner Zustand nach der Erstellung ändern kann. Wenn mehrere Threads dieselbe Instanz nutzen, können sich Änderungen in einem Thread unerwartet auf andere Threads auswirken und zu Fehlern führen. Diese Probleme führten zur Erstellung unveränderlicher Klassen im Paket java.time, das in Java 8 eingeführt wurde.

import java.util.Date;

public class MutableDateExample {
    public static void main(String[] args) {
        Date sharedDate = new Date(); // Initial date

        Runnable task1 = () -> {
            sharedDate.setYear(2025 - 1900); // Mutate the date (Deprecated method)
            System.out.println("Task 1: " + sharedDate);
        };

        Runnable task2 = () -> {
            sharedDate.setMonth(5); // Mutate the month
            System.out.println("Task 2: " + sharedDate);
        };

        new Thread(task1).start();
        new Thread(task2).start();
    }
}
Nach dem Login kopieren

Probleme mit veränderlichen Datums-/Uhrzeitklassen

Parallelitätsprobleme: Im obigen Beispiel ändern beide Aufgaben gleichzeitig das sharedDate-Objekt. Dies kann zu unvorhersehbaren Ergebnissen führen, da Date veränderbar und nicht threadsicher ist.

Datenintegrität: Änderungen in einem Teil des Codes können sich unerwartet auf andere Teile auswirken, in denen dasselbe Datumsobjekt verwendet wird, und zu falschen Daten oder Logikfehlern führen.

Veränderliche Klasse: java.util.Date, java.util.Calendar, java.util.GregorianCalendar, java.text.SimpleDateFormat, java.util.TimeZone, java.util.Locale

Unveränderliche DateTime

java.time-Paket (eingeführt in Java 8)

Die java.time-API ist so konzipiert, dass sie sicher und unveränderlich ist. Seine Klassen sind unveränderlich, was bedeutet, dass ein einmal erstelltes Objekt nicht mehr geändert werden kann. Um ein Datum oder eine Uhrzeit zu aktualisieren, erstellen Sie ein neues Objekt mit dem aktualisierten Wert, anstatt das ursprüngliche zu ändern.

  • Schlüsselklassen
    • LocalDate, LocalTime, LocalDateTime: Stellt Datum und Uhrzeit ohne Zeitzoneninformationen dar.
    • ZonedDateTime, OffsetDateTime, OffsetTime: Stellt Datum und Uhrzeit mit Zeitzonen- oder Offset-Informationen dar.
    • Augenblick: Stellt einen bestimmten Zeitpunkt (UTC) dar.
    • Dauer, Zeitraum: Stellt zeitbasierte und datumsbasierte Zeitspannen dar.
LocalDate initialDate = LocalDate.of(2024, 8, 21); // Initial date

        // Create a new date by adding 5 days
        LocalDate updatedDate = initialDate.plusDays(5);

        // Print the initial and updated dates
        System.out.println("Initial Date: " + initialDate);
        System.out.println("Updated Date: " + updatedDate);

        // Print the memory addresses of the initial and updated dates
        System.out.println("Initial Date Address: " + System.identityHashCode(initialDate));
        System.out.println("Updated Date Address: " + System.identityHashCode(updatedDate));

// example output
// Initial Date: 2024-08-21
// Updated Date: 2024-08-26
// Initial Date Address: 1555845260
// Updated Date Address: 1590550415
Nach dem Login kopieren

Zusammenfassung:

  • Veränderliche Klassen (java.util.Date, java.util.Calendar): Anfällig für Probleme wie Parallelitätsprobleme, unbeabsichtigte Nebenwirkungen und historische Fehler. Nur für Legacy-Code oder bestimmte Szenarien geeignet, bei denen Unveränderlichkeit kein Problem darstellt.
  • Unveränderliche Klassen (java.time): Bieten Thread-Sicherheit, vorhersehbares Verhalten und insgesamt besseres Design. Sie sollten für neue Codebasen und bei der Arbeit mit modernen Java-Anwendungen bevorzugt werden.

Das obige ist der detaillierte Inhalt vonVeränderbare und unveränderliche Java DateTime API. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!