Как Java делает потокобезопасным в API времени и даты - PullRequest
0 голосов
/ 19 марта 2019

В предыдущем потоке API даты и времени небезопасны .... Я хочу знать, как они достигли в новом API времени и даты в Java 8 ??(раньше, они также могут защитить поток, используя синхронизацию и создание отдельного экземпляра для каждого потока). В java 8 то, что они добавляют, приводит также несколько примеров ... Спасибо.

Ответы [ 2 ]

1 голос
/ 19 марта 2019

SimpleDateFormat, существовавший с первых дней существования Java, использовал внутренние поля для хранения временного состояния, но ничего не делал для предотвращения одновременного обновления их двумя потоками.Это приводит к неправильной дате возврата, если два потока вызвали методы format или parse в одном и том же экземпляре SimpleDateFormat одновременно, поскольку они изменят внутреннее состояние объекта SimpleDateFormat, в то время как другойвсе еще использовал это состояние.

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

0 голосов
/ 20 марта 2019

Безопасность потоков в java.time (современный API даты и времени Java, представленный в Java 8) достигается с помощью неизменяемых классов. Неизменяемый объект всегда поточно-ориентирован (см. Модификацию последнего оператора в нижней части первой ссылки). Как отмечает Хольгер в комментарии ,

без мутаций, несоответствий быть не может.

Ссылки:

...