重量級鎖 synchronized

2021-09-30 16:30:07 字數 387 閱讀 5096

synchronized關鍵字並非一開始就該物件加上重量級鎖,也是從偏向鎖,輕量級鎖,再到重量級鎖的過程。這個過程也告訴我們,假如我們一開始就知道某個同步**塊的競爭很激烈、很慢的話,那麼我們一開始就應該使用重量級鎖了,從而省掉一些鎖轉換的開銷。

互斥鎖(重量級鎖)也稱為阻塞同步、悲觀鎖

重量級鎖是依賴物件內部的monitor鎖來實現的,而monitor又依賴作業系統的mutexlock(互斥鎖)來實現的,所以重量級鎖也稱為互斥鎖

為什麼重量級執行緒開銷很大的?

當系統檢查到鎖是重量級鎖之後,會把等待想要獲得鎖的執行緒進行阻塞,被阻塞的執行緒不會消耗cpu。但是阻塞或者喚醒乙個執行緒時,都需要作業系統來幫忙,這就需要從使用者態轉換到核心態,而轉換狀態是需要消耗很多時間的,有可能比使用者執行**的時間還要長。

偏向鎖 輕量級鎖 重量級鎖

首先簡單說下先偏向鎖 輕量級鎖 重量級鎖三者各自的應用場景 偏向鎖 只有乙個執行緒進入臨界區 輕量級鎖 多個執行緒交替進入臨界區 重量級鎖 多個執行緒同時進入臨界區。還要明確的是,偏向鎖 輕量級鎖都是jvm引入的鎖優化手段,目的是降低執行緒同步的開銷。比如以下的同步 塊 synchronized l...

偏向鎖 輕量級鎖 重量級鎖

synchronized關鍵字就像是汽車的自動檔,現在詳細講這個過程。一腳油門踩下去,synchronized會從無鎖公升級為偏向鎖,再公升級為輕量級鎖,最後公升級為重量級鎖,就像自動換擋一樣。那麼自旋鎖在 呢?這裡的輕量級鎖就是一種自旋鎖。初次執行到synchronized 塊的時候,鎖物件變成偏...

輕量級鎖,偏向鎖,重量級鎖

物件頭資訊 使用monitor物件來實現重量級鎖,如果使用重量級鎖,加鎖過程就需要先去關聯monitor物件,然後還需要各種判斷。asychronized關鍵字實現重量級鎖的原理 monitorenter和monitorexit就是操作monitor物件,會有效能損耗,所以引入輕量級鎖。當出現重量級...