Что синхронизируется замок?
Блокировка объекта, который может включать в себя: это критический объект ресурс, объект класса класса
Блокировка лежащий в основе реализации
Синхронизация синхронизации блока монитора на основе ввода и контролировать команды выхода,
Косвенно реализовать метод синхронизации, основанный на методе чтения флага ACC_SYNCHRONIZED выполнения постоянного бассейна.
Состав памяти объекта
Заголовок объекта: хэш-код \ блокировки информации \ информационного GC \ хранения указательного типа объекта
переменные экземпляра
Набивка данные: начальный адрес требований целевой виртуальной машины должен быть целым кратным 8 байт. незначащие данные не должны присутствовать, только для выравнивания байтов.
процесс внедрения
При выполнении синхронизируются или синхронизируются блок-метод синхронизации, метка блокировки записи, монитор блокировки объекта метку, указывающую на начальный адрес в заголовке объекта.
monotor объекты: Каждый объект, связанный с наличием монитора, монитор может создать или уничтожить автоматически генерируется, когда поток пытается получить объект блокировку вместе с объектом. Когда объект монитор удерживается на волоске, он находится в заблокированном состоянии
ObjectMonotor монитор реализован. ObjectMonitor включает в себя: _owner маркер, две очереди, _waitSet \ _entryList
Когда поток одновременно получать доступ и тот же код синхронизации, сначала входит _entryList, когда нить приобретает флаг блокировки, _owner записать эту нить, монитор и операция Счетчик +1 выполняется от имени замка. И продолжает блокировать другие потоки в _entryList в.
Если выполнение потока вызывает метод ожидания, счетчик устанавливается в мониторе 0, _owner установлен отказаться от блокировки имеет нулевое значение, от имени, поток выполнения вошел в waitset заблокирован.
Если выполнение потока вызовов уведомит \ notifyAll, _waitset нить просыпается, введите _entryList в заблокирован в ожидании, чтобы приобрести марку замка.
Если код синхронизации выполнения выполнение потока завершается, выпустит знак блокировки, счетчик устанавливается для контроля 0, _owner установлено нулевое значение