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(); } }
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
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.
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
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!