Junior — Middle
103
Môže jednorazové volanie metódy deklarovanej ako synchronized znovu vstúpiť do tej istej metódy počas jej vykonávania?
Spoločnosti boli požiadané
Odpoveď od AI
sobes.tech AI
Да, однопоточный вызов метода, объявленного с ключевым словом synchronized, может повторно войти в тот же метод во время его выполнения. Это называется рекурсивной блокировкой (reentrant lock).
В Java монитор (lock), связанный с synchronized-блоком или методом, поддержит счетчик захватов. Если поток уже владеет монитором, он может повторно войти в synchronized-блок без блокировки, увеличивая счетчик. Монитор будет освобожден только тогда, когда поток выйдет из всех вложенных synchronized-блоков, и счетчик достигнет нуля.
Пример:
public class ReentrantExample {
public synchronized void method() {
System.out.println("Вход в метод");
// Рекурсивный вызов
if (условие) {
method();
}
System.out.println("Выход из метода");
}
}
В этом примере поток может безопасно войти в метод повторно, не блокируясь.