Mediumsynchronized

Что такое synchronized?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

synchronized — механизм mutual exclusion на monitor-е объекта. Reentrant: поток, держащий monitor, может войти повторно (счётчик). Выход из synchronized устанавливает happens-before — другие потоки видят изменения.

class Counter {
    private int count;

    synchronized void inc() { count++; }          // monitor = this
    static synchronized void reset() { /* ... */ } // monitor = Class объект

    void add(int n) {
        synchronized (this) { count += n; }        // блок — явно monitor
    }
}
  • Instance method → monitor this; static method → monitor Class (static и instance не блокируют друг друга);
  • Block → явно указанный объект;
  • Ограничения: только один поток, нет tryLock с timeout, condition variables только через wait/notify;
  • Гибче — ReentrantLock + Condition, а для high-throughput — Atomic/ConcurrentHashMap.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.