Разница между synchronized-блоками и synchronized-методами

Есть ли между ними разница, или они эквивалентны?


Ответы (1 шт):

Автор решения: Podushkoved

При синхронизации метода выполняется эффективная синхронизация по самому объекту. Если метод статический, синхронизация выполняется по классу объекта. Следующие два блока кода работают схожим образом:

public synchronized int getCount() {
    // ...
}

Это то же самое, как если бы вы написали:

public int getCount() {
    synchronized(this) {
        // ...
    }
}

Если нужно контролировать синхронизацию по определенному объекту, или нужно синхронизировать только часть метода, тогда можно использовать блок synchronized. Если ключевое слово synchronized указано в сигнатуре метода, тогда синхронизируется весь метод или класс.


См. Why is synchronized block better than synchronized method?

→ Ссылка