Security middle
Как сделать потокобезопасный singleton?
Ответ
Лучшее — enum. Альтернативы: static holder (lazy init via classloader), double-checked locking с volatile.
Разбор: enum-singleton потокобезопасен по спецификации JLS и устойчив к рефлексии и сериализации; static holder использует ленивую инициализацию класса JVM, а DCL обязан иметь volatile, иначе из-за переупорядочивания записей другой поток может увидеть недостроенный объект. Ловушки: synchronized getInstance работает, но не «без накладных расходов» (блокировка на каждом чтении), а DCL без volatile именно из-за reordering небезопасен.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.