<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
特性:可重入、獨享、悲觀鎖。
鎖相關的優化:
-XX:+DoEscapeAnalysis
、 -XX:+EliminateLocks
。/** * 鎖消除範例,JIT即時編譯,進行了鎖消除 * @author 劉亞樓 * @date 2020/1/16 */ public class LockEliminationExample { /** * StringBuilder執行緒不安全,StringBuffer用了synchronized關鍵字,是執行緒安全的 * 針對下面這種單執行緒加鎖、解鎖操作,JIT會進行優化,進行鎖消除 */ public static void eliminateLock() { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("a"); stringBuffer.append("b"); stringBuffer.append("c"); stringBuffer.append("a"); stringBuffer.append("b"); stringBuffer.append("c"); stringBuffer.append("a"); stringBuffer.append("b"); stringBuffer.append("c"); } }
/** * 鎖粗化範例 * @author 劉亞樓 * @date 2020/1/16 */ public class LockCoarseningExample { /** * 針對下面這種無意義的加鎖操作,JIT會進行優化,對變數i的所有操作放到一個同步程式碼塊裡 */ public static void lockCoarsening() { int i = 0; synchronized (LockCoarseningExample.class) { i++; } synchronized (LockCoarseningExample.class) { i--; } synchronized (LockCoarseningExample.class) { i++; } synchronized (LockCoarseningExample.class) { i++; i--; i++; } } }
備註:鎖消除和鎖粗化的區別在於鎖消除是針對單個執行緒重複加解鎖做的優化,最終沒有鎖的存在。而鎖粗化不只是針對單執行緒,且最終還是有鎖的存在。
首先,物件在堆中由物件頭、範例資料和對齊填充組成。
物件頭包含兩部分資訊,第一部分用於儲存物件自身的執行時資料,如雜湊碼、GC分代年齡、鎖狀態標誌、執行緒持有的鎖、偏向鎖id等,這部分資料官方稱為"Mark Word"。
物件頭的另一部分是型別指標,即物件指向它的類後設資料的指標,虛擬機器器通過這個指標來確定這個物件是哪個類的範例。
synchronized實現的鎖是通過改變物件頭的"Mark Word"來實現的。
"Mard Word"在32位元和64位元的虛擬機器器(未開啟壓縮指標)中分別為32位元和64位元。32位元虛擬機器器"Mark Word"如下:
無鎖變成輕量級鎖時,多個執行緒會讀取物件的物件頭的無鎖狀態mark word內容,然後進行cas
操作進行修改,預期值是無鎖狀態mark word內容,新值是輕量級鎖狀態mark word內容,若修改成功,Lock record address
指向成功獲取鎖的執行緒的Lock Record
。
演示流程如下:
由於未成功獲取鎖的執行緒會自旋,長時間自旋會消耗CPU資源,因此自旋到一定次數會進行鎖升級,由輕量級鎖轉變為重量級鎖。
重量級鎖是通過object monitor(物件監視器)實現的,物件監視器包括entryList(鎖池)、owner(持鎖者)、waitSet(等待集合)等。
升級為重量級鎖時物件頭mark word的內容是monitor address(物件監視器地址),指向物件監視器。
演示流程如下:
備註:搶鎖失敗執行緒會進入entryList(鎖池),在呼叫wait方法後,執行緒會進入waitSet(等待集合),waitSet中的執行緒被喚醒後會重新進入entryList。
加鎖之後不解鎖,針對單執行緒
所謂偏向就是偏心,單執行緒加鎖之後就不再解鎖,減少了加鎖→業務處理→釋放鎖→加鎖操作流程。
在JDK6以後,預設已經開啟了偏向鎖這個優化,通過JVM引數-XX:-UseBiasedLocking
來禁用偏向鎖,若偏向鎖開啟,只有一個執行緒搶鎖,可獲取到偏向鎖。
關於偏向鎖Mark Word內容如下:
偏向標記第一次有用,出現過爭用後就沒用了。
偏向鎖本質就是無鎖,如果沒有發生過任何多執行緒爭搶鎖的情況,JVM認為就是單執行緒,無需做同步。
備註:JVM為了少幹活,同步在JVM底層是有很多操作來實現的,如果沒有爭用,就不需要去做同步操作。
如果未開啟偏向鎖,無鎖狀態會先升級為輕量級鎖,輕量級鎖自選到一定程度升級為重量級鎖。
如果開啟了偏向鎖,有兩種情況:
到此這篇關於Java關鍵字synchronized原理與鎖的狀態詳解的文章就介紹到這了,更多相關Java synchronized內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45