Встречается на собеседованиях • сегодня
Обеспечивает ли Singleton потокобезопасность
Singleton сам по себе не гарантирует потокобезопасность. Проблема возникает, если несколько потоков одновременно пытаются создать экземпляр.
Пример небезопасной реализации:
java
public class UnsafeSingleton {
private static UnsafeSingleton instance;
private UnsafeSingleton() {}
public static UnsafeSingleton getInstance() {
if (instance == null) {
instance = new UnsafeSingleton(); // Race condition
}
return instance;
}
}Потокобезопасные варианты:
- Synchronized метод (но это медленно):
java
public static synchronized SafeSingleton getInstance() {...}- Double-Checked Locking (лучший вариант):
java
private static volatile SafeSingleton instance;
public static SafeSingleton getInstance() {
if (instance == null) {
synchronized (SafeSingleton.class) {
if (instance == null) {
instance = new SafeSingleton();
}
}
}
return instance;
}- Инициализация при загрузке класса (самый простой и надежный):
java
private static final SafeSingleton INSTANCE = new SafeSingleton();
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы