Неустойчивое чтение не очень дорого само по себе.
Вы можете создать тест для вызова getInstance()
в узком цикле, чтобы наблюдать влияние изменчивого чтения; однако этот тест нереалистичен; в такой ситуации программист обычно вызывал getInstance()
один раз и кэшировал экземпляр для продолжительности использования.
Другой impl с помощью поля final
(см. wikipedia). Для этого требуется дополнительное чтение, которое может стать дороже, чем версия volatile
. Версия final
может быть быстрее в узком цикле, однако этот тест является спорным, как ранее утверждалось.