Dans le package java.util, de nombreuses classes sont mutables, ce qui signifie que leur état interne peut changer après la création. Si plusieurs threads partagent la même instance, les modifications apportées à un thread peuvent avoir un impact inattendu sur les autres, entraînant des bogues. Ces problèmes ont conduit à la création de classes immuables dans le package java.time introduit dans Java 8.
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(); } }
Problèmes de concurrence: Dans l'exemple ci-dessus, les deux tâches modifient l'objet sharedDate simultanément. Cela peut conduire à des résultats imprévisibles car Date est mutable et n'est pas thread-safe.
Intégrité des données: Les modifications dans une partie du code peuvent affecter de manière inattendue d'autres parties où le même objet date est utilisé, entraînant des données incorrectes ou des erreurs logiques.
Classe mutable: java.util.Date, java.util.Calendar, java.util.GregorianCalendar, java.text.SimpleDateFormat, java.util.TimeZone, java.util.Locale
L'API java.time est conçue pour être sûre et immuable. Ses classes sont immuables, ce qui signifie qu'une fois que vous créez un objet, il ne peut plus être modifié. Pour mettre à jour une date ou une heure, vous créez un nouvel objet avec la valeur mise à jour au lieu de modifier celle d'origine.
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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!