Sobes.tech
Junior — Middle
81

Мәліметтерді синхрондау үшін 'synchronized' кілт сөзін әдіс үшін және нақты объектіні синхрондайтын блок үшін қолданудың айырмашылығы қандай?

Сұралған компаниялар
ИннотехИннотех

AI-дан жауап

sobes.tech 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
        }
    }
}