Junior — Middle
Qual è la differenza tra l'uso della parola chiave 'synchronized' per un metodo e per un blocco che sincronizza un oggetto specifico?
sobes.tech AI
Risposta dell'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
}
}
}