Back to questions
Иннотех
Junior — Middle
59
Какое отличие существуют между использованием ключевого слова 'synchronized' для метода и для блока, синхронизирующего конкретный объект?
Companies where asked
Answer from AI
sobes.tech 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
}
}
}