Spring middle

Singleton-бин: потокобезопасен ли?

Ответ

НЕТ. Singleton означает один экземпляр на контекст, но это НЕ делает его потокобезопасным. Если есть mutable state (поля, не final) — race condition, ведь объект делят все потоки. Решения: stateless бины (без полей-состояний), ThreadLocal, synchronized или атомарные типы.

Разбор: Singleton-scope означает лишь один экземпляр бина на контекст и сам по себе не даёт никакой потокобезопасности: при наличии изменяемого состояния (нефинальных полей) возникают гонки, так как один объект делят все потоки. Spring не синхронизирует методы и не оборачивает поля. Решение — делать бины stateless либо защищать состояние (synchronized, ThreadLocal, атомарные типы).

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

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