Sobes.tech
Junior — Middle
61

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

Answer from AI

sobes.tech AI

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

Отличия между synchronized для метода и для блока внутри метода:

  • synchronized метод:

    • Синхронизирует весь метод.
    • Если метод нестатический, блокировка происходит на объекте (this).
    • Если метод статический, блокировка происходит на объекте класса (Class объект).
  • synchronized блок внутри метода:

    • Позволяет синхронизировать только часть метода.
    • Можно явно указать объект, на котором происходит блокировка, например, synchronized(this), synchronized(lockObject).
    • Более гибкий подход, позволяет уменьшить время удержания блокировки.

Пример:

public class Example {
    private final Object lock = new Object();

    public synchronized void syncMethod() {
        // весь метод синхронизирован на this
    }

    public void syncBlock() {
        // часть метода синхронизирована
        synchronized(lock) {
            // критическая секция
        }
    }
}

Использование блока synchronized внутри метода позволяет более точно контролировать область синхронизации и может повысить производительность за счёт уменьшения времени блокировки.