Встречается на собеседованиях • сегодня

Обеспечивает ли 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;
    }
}

Потокобезопасные варианты:

  1. Synchronized метод (но это медленно):
java
public static synchronized SafeSingleton getInstance() {...}
  1. 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;
}
  1. Инициализация при загрузке класса (самый простой и надежный):
java
private static final SafeSingleton INSTANCE = new SafeSingleton();
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы