Я думаю, что они хотят избежать чтения из поля volatile
дважды.
- один раз, чтобы проверить, является ли оно
null
- один раз для
return
В своей версии они только
- один раз считали ее в локальную переменную
- подтверждают, что локальная переменная не равна нулю
- returnэта локальная переменная
Оптимизация для «счастливого пути», который происходит невероятно чаще, чем «начальный путь установки», который происходит только один раз - или, самое большее, несколько раз, если метод вызываетсяодновременно до завершения инициализации.
Или, возможно, меры предосторожности против одновременной модификации?
Таких мер предосторожности нет.Если вы вызываете linePattern
одновременно до того, как он закончит установку статического изменчивого поля, шаблон будет создаваться несколько раз (но это нормально), будут возвращаться разные экземпляры, и будет выбираться случайный из них для сохранения (это такжехорошо, так как они эквивалентны).
Любые меры предосторожности против этого только увеличат стоимость нашего «счастливого пути», поэтому его следует выполнять только в ситуациях, когда по какой-то причине экземпляр действительно должен быть единичным.