Мы используем файлы cookie
Мы используем файлы cookie для улучшения работы сайта и предоставления вам персонализированного опыта. Правила использования файлов cookie можно найти в нашей политике конфиденциальности
Механизм synchronized
в Java основан на концепции мониторов (monitor objects). Каждому объекту в Java ассоциирован монитор.
Когда поток входит в синхронизированный блок или метод, он пытается захватить монитор соответствующего объекта. Если монитор свободен, поток захватывает его и продолжает выполнение. Если монитор занят другим потоком, текущий поток блокируется и переходит в состояние ожидания, пока монитор не освободится.
Когда поток покидает синхронизированный блок или метод (либо успешно завершив его, либо выбросив исключение), он освобождает монитор.
Внутри монитора реализованы:
wait()
, notify()
и notifyAll()
. Эти методы позволяют потокам, владеющим монитором, временно освободить его и перейти в состояние ожидания, а затем быть уведомленными другими потоками о возможности продолжить работу.Реализация под капотом включает в себя:
monitorenter
инcтрукция: Выполняется при входе в синхронизированный блок или метод. Пытается захватить монитор объекта.monitorexit
инcтрукция: Выполняется при выходе из синхронизированного блока или метода (как в случае нормального завершения,Механизм synchronized
в Java основан на концепции мониторов (monitor objects). Каждому объекту в Java ассоциирован монитор.
Когда поток входит в синхронизированный блок или метод, он пытается захватить монитор соответствующего объекта. Если монитор свободен, поток захватывает его и продолжает выполнение. Если монитор занят другим потоком, текущий поток блокируется и переходит в состояние ожидания, пока монитор не освободится.
Когда поток покидает синхронизированный блок или метод (либо успешно завершив его, либо выбросив исключение), он освобождает монитор.
Внутри монитора реализованы:
wait()
, notify()
и notifyAll()
. Эти методы позволяют потокам, владеющим монитором, временно освободить его и перейти в состояние ожидания, а затем быть уведомленными другими потоками о возможности продолжить работу.Реализация под капотом включает в себя:
monitorenter
инcтрукция: Выполняется при входе в синхронизированный блок или метод. Пытается захватить монитор объекта.monitorexit
инcтрукция: Выполняется при выходе из синхронизированного блока или метода (как в случае нормального завершения,Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.