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.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться