Junior — Middle
81
Мәліметтерді синхрондау үшін 'synchronized' кілт сөзін әдіс үшін және нақты объектіні синхрондайтын блок үшін қолданудың айырмашылығы қандай?
Сұралған компаниялар
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
}
}
}