Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: simpledateformat

Почему SimpleDateFormat не потокобезопасен?

Вопрос проверяет понимание внутреннего состояния объектов и проблем совместного доступа.

Короткий ответ

SimpleDateFormat хранит изменяемое состояние.
При форматировании и парсинге это состояние изменяется.
При использовании из нескольких потоков возникают гонки данных.
Это приводит к некорректным результатам или исключениям.
Класс не содержит внутренней синхронизации.

Длинный ответ

Чтобы понять проблему, важно заглянуть внутрь класса.

Определение

SimpleDateFormat — это класс для форматирования и парсинга дат, использующий внутренние изменяемые поля.

Внутреннее состояние

SimpleDateFormat использует:

  • Calendar

  • временные буферы

  • промежуточные поля

Все они:

  • изменяются во время работы

  • разделяются между потоками при общем экземпляре

Пример проблемы

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Runnable task = () -> {
    sdf.format(new Date());
};

При выполнении из нескольких потоков:

  • значения могут «перетираться»

  • результат форматирования становится некорректным

Как решить проблему

Варианты:

  • создавать новый экземпляр на поток

  • использовать ThreadLocal<SimpleDateFormat>

  • использовать DateTimeFormatter из java.time

Вывод

SimpleDateFormat не потокобезопасен из-за разделяемого изменяемого состояния и отсутствия синхронизации.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#simpledateformat

Подпишись на Java Developer в телеграм