日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

synchronized的偏斜锁,轻量级锁,重量级锁

發布時間:2023/12/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 synchronized的偏斜锁,轻量级锁,重量级锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

synchronized的偏斜鎖,輕量級鎖,重量級鎖

  • synchronized重在哪里?
  • JDK1.6之后synchronized發生了什么變化?
    • 偏斜鎖(偏向鎖)
    • 輕量級鎖
    • 重量級鎖
  • 參考

有關synchronized鎖升級的理念,很多博客講的很明白,在這里我將我個人的理解講述一下,方便各位的理解,如果有描述的不正確的地方還請多多指正,不勝感激。

synchronized 是 Java 內建的同步機制,所以也有人稱其為 Intrinsic Locking,它提供了互斥的語義和可見性,當一個線程已經獲取當前鎖時,其他試圖獲取的線程只能等待或者阻塞在那里。

synchronized重在哪里?

JDK1.6之前,使用synchronized來添加同步操作的話,synchronized會直接鎖上睜個代碼塊,當一個線程訪問來加鎖的資源時。其他的所有線程會進入堵塞隊列中堵塞。完事在一個一個的喚醒。而將線程堵塞和喚醒這個操作是需要操作系統的幫助,需要進行用戶態到內核態的切換。操作系統這個操作是非常慢的,重即重在這里。

JDK1.6之后synchronized發生了什么變化?

JDK1.6之后,整個synchronized操作會根據并發的情況來逐步的進行鎖升級。

偏斜鎖(偏向鎖)

如果被synchronized同步的對象,一直只有同一個線程來訪問。
那么會將這個線程id保存到這個對象的對象頭中,具體保存到對象頭中的一個叫做MarkWord的部分。表示對象偏向于這個線程。以后這個線程再來的話,一看到對象頭中有自己的線程id就會自動放行。這就是偏向鎖。

輕量級鎖

在偏斜鎖的情況下,如果有另一個線程也想訪問被synchronized同步的對象。那么線程會通過CAS的方式來嘗試將自己的線程id寫入到剛剛那個MarkWord中,如果寫入成功了,就會成功獲取鎖。

重量級鎖

剛剛CAS寫入的時候不成功會進行多次自旋,當超過一定次數,就會最終升級成重量級鎖,這個時候的操作就和早期jdk的synchronized一樣了,此時會調用操作系統的互斥鎖。當前線程會被阻塞住。

參考

synchronized底層如何實現?什么是鎖的升級、降級?: 鏈接.

總結

以上是生活随笔為你收集整理的synchronized的偏斜锁,轻量级锁,重量级锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。