鎖可以公升級但不能降級,意味著偏向鎖公升級成輕量級鎖後不能降級成偏向鎖。這種鎖公升級卻不能降級的策略,目的是為了提高獲得鎖和釋放鎖的效率
偏向鎖自旋鎖
輕量級鎖
重量級鎖
偏向鎖是指一段同步**一直被乙個執行緒所訪問,那麼該執行緒會自動獲取鎖。降低獲取鎖的代價。
輕量級鎖是指當鎖是偏向鎖的時候,被另乙個執行緒所訪問,偏向鎖就會公升級為輕量級鎖,其他執行緒會通過自旋的形式嘗試獲取鎖,不會阻塞,提高效能。
重量級鎖是指當鎖為輕量級鎖的時候,另乙個執行緒雖然是自旋,但自旋不會一直持續下去,當自旋一定次數的時候,還沒有獲取到鎖,就會進入阻塞,該鎖膨脹為重量級鎖。重量級鎖會讓其他申請的執行緒進入阻塞,效能降低。
偏向鎖 輕量級鎖
大多數情況下,不僅不存在多執行緒競爭,而且乙個執行緒會一直去執行乙個同步 塊。基於這種情況,當環境中只有乙個執行緒時,使用無鎖機制 偏向鎖。當某個執行緒獲取到物件的鎖後,會將物件的物件頭設定為 鎖標誌位置為01,偏向鎖標誌為1,偏向執行緒id為當前執行緒的id 並在當前執行緒的棧幀中記錄偏向鎖資訊。...
輕量級鎖和偏向鎖
synchronized會在物件的頭部打標記,這個加鎖的動作是必須要做的,悲觀鎖通常還會做許多其他的指令動作,輕量級鎖希望通過cas實現,它認為通過cas嘗試修改物件頭部的mark區域的內容就可以達到目的,由於mark區域的寬度通常是4 8位元組,也就是相當於乙個int或者long的寬度,是否適合於...
偏向鎖 輕量級鎖 重量級鎖
首先簡單說下先偏向鎖 輕量級鎖 重量級鎖三者各自的應用場景 偏向鎖 只有乙個執行緒進入臨界區 輕量級鎖 多個執行緒交替進入臨界區 重量級鎖 多個執行緒同時進入臨界區。還要明確的是,偏向鎖 輕量級鎖都是jvm引入的鎖優化手段,目的是降低執行緒同步的開銷。比如以下的同步 塊 synchronized l...