Каким образом ключевое слово synchronized взаимодействует с монитором при использовании его на методе?

В Java ключевое слово synchronized, применённое к методу, означает, что при вызове этого метода поток должен получить монитор (lock) объекта, которому принадлежит метод:

Короткий ответ

Что ответить на собеседовании

В Java ключевое слово synchronized, применённое к методу, означает, что при вызове этого метода поток должен получить монитор (lock) объекта, которому принадлежит метод:

Подробный разбор

Ответ с пояснениями

В Java ключевое слово synchronized, применённое к методу, означает, что при вызове этого метода поток должен получить монитор (lock) объекта, которому принадлежит метод:

  • Для нестатических методов монитором является сам объект (this).
  • Для статических методов монитором является объект класса (Class объект).

Когда поток вызывает synchronized метод, он пытается захватить монитор. Если монитор уже занят другим потоком, вызывающий поток блокируется до освобождения монитора.

Таким образом, synchronized на методе обеспечивает взаимное исключение (mutex) для всех вызовов этого метода на одном объекте (или классе для статических методов), предотвращая одновременное выполнение кода метода несколькими потоками.

Пример:

public synchronized void increment() {
    count++;
}

Здесь increment может выполняться только одним потоком на объекте одновременно, так как поток должен получить монитор объекта перед выполнением.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее