Когда метод помечен как synchronized, он автоматически захватывает встроенную блокировку объекта (this), на котором вызывается метод.
Встроенная блокировка захватывается перед выполнением метода и освобождается после его завершения. Этот механизм работает автоматически и применяется во всех ситуациях:
Это гарантирует, что блокировка всегда будет освобождена, предотвращая дедлоки.
Синхронизированный метод функционально эквивалентен оборачиванию всего тела метода в блок synchronized:
// Синхронизированный метод
public synchronized void myMethod() {
// тело метода
}
// Эквивалентный код с использованием synchronized блока
public void myMethod() {
synchronized(this) {
// тело метода
}
}
Этот подход лежит в основе встроенного в Java механизма синхронизации для контроля доступа к общим ресурсам.
Синхронизированный метод экземпляра захватывает внутреннюю блокировку объекта экземпляра (this) перед выполнением и освобождает её после завершения выполнения, независимо от того, завершится ли метод нормально или выбросит исключение.
Новый — ещё не проверен сообществом
Вы