Sobes.tech
Junior — Middle

Wat is het verschil tussen het gebruik van het sleutelwoord 'synchronized' voor een methode en voor een blok die een specifiek object synchroniseert?

sobes.tech AI

Antwoord van AI

Ключевое слово synchronized в Java можно использовать двумя способами: для метода и для блока кода.

  • Синхронизация метода:

    • Если метод объявлен как synchronized, то монитор (lock) берётся на объекте, для которого вызывается метод (то есть this для нестатических методов) или на классе (для статических методов).
    • Это значит, что весь метод выполняется под блокировкой, и другие потоки не смогут войти в любой другой synchronized метод того же объекта (или класса для статических).
  • Синхронизация блока:

    • Позволяет явно указать объект, монитор которого нужно захватить.
    • Это даёт более тонкий контроль: можно синхронизировать только часть метода и выбрать конкретный объект для блокировки.

Отличия:

  • Метод synchronized блокирует весь метод, блокировка всегда на this или классе.
  • Блок synchronized(obj) блокирует только указанный объект obj и только внутри блока.

Пример:

public class Example {
    public synchronized void syncMethod() {
        // блокируется this
    }

    private final Object lock = new Object();

    public void syncBlock() {
        synchronized(lock) {
            // блокируется lock
        }
    }
}