Возврат не нужно синхронизировать. Поскольку CountDownLatch.countDown()
не вызывается до тех пор, пока значение не будет установлено в последний раз, CountDownLatch.await()
гарантирует, что значение будет стабильным до того, как оно будет прочитано и возвращено.
Разработчик, который написал это, вероятно, не совсем уверен в том, что он делал (параллелизм сложен и опасен) или, что более вероятно, его использование аннотации GuardedBy
в value
заставило его систему сборки выдать предупреждение на return
, и какой-то другой разработчик синхронизировал его без необходимости, просто чтобы убрать предупреждение.
Я говорю «какой-то другой разработчик», потому что этот класс, в противном случае, кажется, специально разработан для того, чтобы getValue()
мог работать без блокировки после установки значения.