java.time.Instant (1.8) является потокобезопасным? - PullRequest
0 голосов
/ 21 ноября 2018
Instant instant;
void updateBy(){
   instant = Instant.now();
}

если да, как доказать, что Instant безопасен для потоков?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Как доказать, что Instant безопасен для потоков?

Анализировать (используя надежные математические / формальные методы) исходный код, чтобы доказать, что он соответствует всем требованиям безопасности потоков.Это единственный способ доказать что-то поточно-безопасное.

Вы не можете доказать это с помощью тестирования.

Вы можете протестировать любой не поточно-безопасный кодтак, как вы хотите, и пройти тесты безопасности.Но это ничего не доказывает.Тесты могут по-прежнему не проходить на другой платформе ОС или в других (возможно, будущих) версиях Java.

(Вы можете доказать , протестировав , если что-то НЕ является поточно-ориентированным.тест показывает неоспоримые признаки не поточно-ориентированного поведения, то есть «доказательства существования».)

Это должно быть спорным для класса Instant. javadoc указывает , что класс Instant является поточно-ориентированным.Если у вас нет особых причин полагать, что этот класс не является потокобезопасным (что будет подлинной ошибкой JVM ), то рекомендуется не тратить свое время на поиск вещей, которые, вероятно, не существуют.

0 голосов
/ 21 ноября 2018

В соответствии с документами для Instant в примечаниях к реализации:

Этот класс является неизменяемым и поточно-ориентированным.

...