Sobes.tech
Junior — Middle

Was ist der Unterschied zwischen der Verwendung des Schlüsselworts 'synchronized' für eine Methode und für einen Block, der ein bestimmtes Objekt synchronisiert?

sobes.tech KI

Antwort von 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
        }
    }
}