Разница между synchronized-блоками и synchronized-методами
Есть ли между ними разница, или они эквивалентны?
Ответы (1 шт):
Автор решения: Podushkoved
→ Ссылка
При синхронизации метода выполняется эффективная синхронизация по самому объекту. Если метод статический, синхронизация выполняется по классу объекта. Следующие два блока кода работают схожим образом:
public synchronized int getCount() {
// ...
}
Это то же самое, как если бы вы написали:
public int getCount() {
synchronized(this) {
// ...
}
}
Если нужно контролировать синхронизацию по определенному объекту, или нужно синхронизировать только часть метода, тогда можно использовать блок synchronized. Если ключевое слово synchronized указано в сигнатуре метода, тогда синхронизируется весь метод или класс.
См. Why is synchronized block better than synchronized method?