Сразу после предыдущегоЗдравствуйте, расскажите о своем понимании Synchronized? (два), эта статья, чтобы поговорить о реализации
synchronized
Смещенная блокировка для эскалации блокировки.
В-четвертых, обновление блокировки
Java 1.6
До,synchronized
Это стандартная тяжеловесная блокировка. Когда несколько потоков конкурируют за общие ресурсы, потоки, которые не конкурировали за ресурсы, всегда будут заблокированы, а производительность высока. В то же время для тяжеловесных блокировок блокировка и освобождение блокировок также потребляют много ресурсов. Чтобы уменьшить накладные расходы на производительность и повысить эффективность, люди разделили четыре состояния блокировки для различных сценариев блокировки, включая отсутствие блокировки, предвзятую блокировку, облегченную блокировку и усиленную блокировку.Степень непрерывно повышается от низкого до высокого.
4.1 Блокировка смещения
Во многих случаях блокировки всегда запрашиваются одним и тем же потоком несколько раз, и потоки, конкурирующие за блокировки, отсутствуют. Для такой ситуации очень подходит смещенный замок, так когда же смещенный замок? В главе 3 мы перечисляемsynchronized
В разных состояниях блокировки,Markword
Существует большая разница в структуре памяти.
4.1.1 Получение предвзятой блокировки
когда поток идет в гостиsynchronized
Когда используется блок кода или метод, украшенный ключевыми словами,Markword
Сохраните идентификатор текущего потока вCAS
сравнить текущийMarkword
Является ли сохраненный идентификатор потока идентификатором потока, пытающегося войти в блок синхронизации, если он равен, нет необходимости снова получать блокировку, и блок кода синхронизации может выполняться напрямую; если он не равен, это означает, что текущая смещенная блокировка смещена в сторону других потоков, и смещенную блокировку необходимо отозвать, а затем обновить блокировку до облегченной блокировки.
4.1.2 Отзыв предвзятого блокировки
Отзыв предвзятой блокировки на самом деле не отменяет блокировку и не переводит ее в свободное от блокировки состояние. Для отзыва смещенных замков есть два случая для исходной удерживающей нити и самого замка.
- Если первоначальный удерживающий поток только что завершил выполнение и вышел из блока кода синхронизации, то на этот раз
Markword
Идентификатор сохраненного потока имеет значение null. - Если исходный удерживающий поток все еще выполняется в блоке синхронизированного кода, смещенная блокировка в это время будет обновлена до облегченной блокировки, после чего исходный поток продолжит выполнение.
На рисунке ниже показаноsynchronized
В модифицированном блоке кода синхронизации процесс потока T1 и потока T2 последовательно конкурирует за ресурсы блокировки.
В следующей главе рассказывается о легких и тяжелых замках.
Длина длинная, чтобы продолжить чтение, пожалуйста, нажмитеЗдравствуйте, расскажите о своем понимании Synchronized? (Четыре)
Брат, не паникуй! Не стесняйтесь оставлять лайки, обсуждать и комментировать. Добро пожаловать в колонку интервьюНе паникуйте, когда сталкиваетесь | Параллельное программирование на Java, Не беспокойтесь о повышении зарплаты во время собеседования. Также добро пожаловать, чтобы следовать за мной, я должен быть лучшим человеком.