SimpleDateFormat
, существовавший с первых дней существования Java, использовал внутренние поля для хранения временного состояния, но ничего не делал для предотвращения одновременного обновления их двумя потоками.Это приводит к неправильной дате возврата, если два потока вызвали методы format
или parse
в одном и том же экземпляре SimpleDateFormat одновременно, поскольку они изменят внутреннее состояние объекта SimpleDateFormat
, в то время как другойвсе еще использовал это состояние.
Java 8 не сделала ничего, чтобы изменить SimpleDateFormat
, вместо этого она представила совершенно новый LocalDate
API, который использует внутреннюю синхронизацию для защиты одновременного доступа к полям (и, возможно, использует локальныйпеременные для уменьшения накладных расходов на блокировку, но я не проверял это), а также устранение сложности часовых поясов и дат до 1990 года, которые также были головной болью для пользователей старых API-интерфейсов Date.