Junior — Middle
Was ist der Unterschied zwischen der Verwendung des Schlüsselworts 'synchronized' für eine Methode und für einen Block, der ein bestimmtes Objekt synchronisiert?
sobes.tech KI
Antwort von 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
}
}
}