> Java > java지도 시간 > 본문

변경 가능 및 불변 Java DateTime API

WBOY
풀어 주다: 2024-08-21 22:38:02
원래의
457명이 탐색했습니다.

Mutable & Immutable Java DateTime API

변경 가능한 DateTime 클래스

java.util 패키지에서는 많은 클래스가 변경 가능합니다. 즉, 생성 후 내부 상태가 변경될 수 있습니다. 여러 스레드가 동일한 인스턴스를 공유하는 경우 한 스레드의 변경 사항이 예기치 않게 다른 스레드에 영향을 미쳐 버그가 발생할 수 있습니다. 이러한 문제로 인해 Java 8에 도입된 java.time 패키지에 불변 클래스가 생성되었습니다.

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();
    }
}
로그인 후 복사

변경 가능한 날짜/시간 클래스 관련 문제

동시성 문제: 위의 예에서 두 작업 모두 sharedDate 객체를 동시에 수정합니다. Date는 변경 가능하고 스레드로부터 안전하지 않기 때문에 예측할 수 없는 결과가 발생할 수 있습니다.

데이터 무결성: 코드의 한 부분을 수정하면 동일한 날짜 개체가 사용되는 다른 부분에 예상치 못한 영향을 미쳐 잘못된 데이터 또는 논리 오류가 발생할 수 있습니다.

변경 가능한 클래스: java.util.Date, java.util.Calendar, java.util.GregorianCalendar, java.text.SimpleDateFormat, java.util.TimeZone, java.util.Locale

불변 날짜/시간

java.time 패키지(Java 8에서 도입됨)

java.time API는 안전하고 변경할 수 없도록 설계되었습니다. 해당 클래스는 변경할 수 없습니다. 즉, 일단 객체를 생성하면 변경할 수 없습니다. 날짜나 시간을 업데이트하려면 원래 값을 변경하는 대신 업데이트된 값으로 새 개체를 만듭니다.

  • 주요 수업
    • LocalDate, LocalTime, LocalDateTime: 시간대 정보 없이 날짜와 시간을 표현합니다.
    • ZonedDateTime, OffsetDateTime, OffsetTime: 날짜와 시간을 타임존이나 오프셋 정보로 표현합니다.
    • 즉시: 특정 시간(UTC)을 나타냅니다.
    • 기간, 기간: 시간 기반 및 날짜 기반 시간을 나타냅니다.
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
로그인 후 복사

요약:

  • 변경 가능한 클래스(java.util.Date, java.util.Calendar): 동시성 문제, 의도하지 않은 부작용, 기록 버그 등의 문제가 발생하기 쉽습니다. 불변성이 문제가 되지 않는 레거시 코드 또는 특정 시나리오에만 적합합니다.
  • 불변 클래스(java.time): 스레드 안전성, 예측 가능한 동작 및 전반적으로 더 나은 디자인을 제공합니다. 새로운 코드베이스와 최신 Java 애플리케이션으로 작업할 때 선호됩니다.

위 내용은 변경 가능 및 불변 Java DateTime API의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!