반응형
환경: 자바8+
SimpleDateFormat은 멀티스레드 환경에서 안전하지 않다.
SimpleDateFormat은 내부적으로 Calendar 인스턴스를 공유하는데, 이 과정에서 공유 자원 변경이 발생하여 멀티스레드 환경에서 예상치 못한 결과를 초래할 수 있다. SimpleDateFormat은 멀티스레드 환경에서 사용할 경우 각 스레드마다 별도 인스턴스를 생성하거나 ThreadLocal을 이용해야 한다.
Java 8부터는 DateTimeFormatter가 제공되며, 이는 불변(immutable) 객체이므로 여러 스레드에서 동시에 안전하게 사용할 수 있다. 따라서 매번 새로 생성할 필요 없이, 재사용하는 것이 성능적으로도 더 유리하다.
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeFormatterExample {
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) {
Runnable task = () -> {
String formattedDate = LocalDateTime.now().format(FORMATTER);
System.out.println(Thread.currentThread().getName() + " : " + formattedDate);
};
for (int i = 0; i < 5; i++) {
new Thread(task).start();
}
}
}
728x90
반응형
'개발 > java' 카테고리의 다른 글
타임 셰어링? 컨텍스트 스위칭? (0) | 2025.02.26 |
---|---|
[java] call by value (0) | 2025.02.25 |
[redis] 자바에서 사용 가능한 레디스 클라이언트 (0) | 2025.01.23 |
[var] 타입 추론과 unchecked (1) | 2025.01.16 |
[함수형 프로그래밍] 일급객체, 고차함수 (0) | 2025.01.06 |