Не паникуйте при встрече | Здравствуйте, расскажите о своем понимании Synchronized? (три)

интервью Java
Не паникуйте при встрече | Здравствуйте, расскажите о своем понимании Synchronized? (три)

Сразу после предыдущегоЗдравствуйте, расскажите о своем понимании Synchronized? (два), эта статья, чтобы поговорить о реализацииsynchronizedСмещенная блокировка для эскалации блокировки.

В-четвертых, обновление блокировки

Java 1.6До,synchronizedЭто стандартная тяжеловесная блокировка. Когда несколько потоков конкурируют за общие ресурсы, потоки, которые не конкурировали за ресурсы, всегда будут заблокированы, а производительность высока. В то же время для тяжеловесных блокировок блокировка и освобождение блокировок также потребляют много ресурсов. Чтобы уменьшить накладные расходы на производительность и повысить эффективность, люди разделили четыре состояния блокировки для различных сценариев блокировки, включая отсутствие блокировки, предвзятую блокировку, облегченную блокировку и усиленную блокировку.Степень непрерывно повышается от низкого до высокого.

4.1 Блокировка смещения

Во многих случаях блокировки всегда запрашиваются одним и тем же потоком несколько раз, и потоки, конкурирующие за блокировки, отсутствуют. Для такой ситуации очень подходит смещенный замок, так когда же смещенный замок? В главе 3 мы перечисляемsynchronizedВ разных состояниях блокировки,MarkwordСуществует большая разница в структуре памяти.

4.1.1 Получение предвзятой блокировки

image.png

когда поток идет в гостиsynchronizedКогда используется блок кода или метод, украшенный ключевыми словами,MarkwordСохраните идентификатор текущего потока вCASсравнить текущийMarkwordЯвляется ли сохраненный идентификатор потока идентификатором потока, пытающегося войти в блок синхронизации, если он равен, нет необходимости снова получать блокировку, и блок кода синхронизации может выполняться напрямую; если он не равен, это означает, что текущая смещенная блокировка смещена в сторону других потоков, и смещенную блокировку необходимо отозвать, а затем обновить блокировку до облегченной блокировки.

4.1.2 Отзыв предвзятого блокировки

Отзыв предвзятой блокировки на самом деле не отменяет блокировку и не переводит ее в свободное от блокировки состояние. Для отзыва смещенных замков есть два случая для исходной удерживающей нити и самого замка.

  • Если первоначальный удерживающий поток только что завершил выполнение и вышел из блока кода синхронизации, то на этот разMarkwordИдентификатор сохраненного потока имеет значение null.
  • Если исходный удерживающий поток все еще выполняется в блоке синхронизированного кода, смещенная блокировка в это время будет обновлена ​​до облегченной блокировки, после чего исходный поток продолжит выполнение.

На рисунке ниже показаноsynchronizedВ модифицированном блоке кода синхронизации процесс потока T1 и потока T2 последовательно конкурирует за ресурсы блокировки.

未命名文件.png

В следующей главе рассказывается о легких и тяжелых замках.
Длина длинная, чтобы продолжить чтение, пожалуйста, нажмитеЗдравствуйте, расскажите о своем понимании Synchronized? (Четыре)


Брат, не паникуй! Не стесняйтесь оставлять лайки, обсуждать и комментировать. Добро пожаловать в колонку интервьюНе паникуйте, когда сталкиваетесь | Параллельное программирование на Java, Не беспокойтесь о повышении зарплаты во время собеседования. Также добро пожаловать, чтобы следовать за мной, я должен быть лучшим человеком.