Maison> Java> javaDidacticiel> le corps du texte

API Java DateTime mutable et immuable

WBOY
Libérer: 2024-08-21 22:38:02
original
391 Les gens l'ont consulté

Mutable & Immutable Java DateTime API

Classes DateTime mutables

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(); } }
Copier après la connexion

Problèmes avec les classes de date/heure mutables

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

DateHeure immuable

Package java.time (introduit dans Java 8)

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.

  • Cours clés
    • LocalDate, LocalTime, LocalDateTime : représentent la date et l'heure sans informations de fuseau horaire.
    • ZonedDateTime, OffsetDateTime, OffsetTime : représentent la date et l'heure avec des informations de fuseau horaire ou de décalage.
    • Instantané : représente un moment spécifique dans le temps (UTC).
    • Durée, Période : représentent des durées basées sur le temps et la date.
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
Copier après la connexion

Résumé:

  • Classes mutables (java.util.Date, java.util.Calendar) : sujettes à des problèmes tels que des problèmes de concurrence, des effets secondaires involontaires et des bugs historiques. Convient uniquement au code existant ou à des scénarios spécifiques où l'immuabilité n'est pas un problème.
  • Classes immuables (java.time) : assurent la sécurité des threads, un comportement prévisible et une meilleure conception globale. Ils doivent être préférés pour les nouvelles bases de code et lorsque vous travaillez avec des applications Java modernes.

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!