synchronized鎖升級原理:
在鎖對象的對象頭里面有一個threadid字段,在次訪問的時候threadid為空,jvm讓其持有偏向鎖,并將threadid設置為其線程id,再次進入的時候會先判斷threadid是否與其線程id一致,如果一致則可以直接使用此對象,如果不一致,則升級偏向鎖為輕量級鎖,通過自旋循環一定次數來獲取鎖,執行一定次數之后,如果還沒有正常獲取到要使用的對象,此時就會把鎖從輕量級升級為重量級鎖,此過程就構成了synchronized鎖的升級。
鎖的升級的目的:
鎖升級是為了減低了鎖帶來的性能消耗。在Java 6之后優化synchronized的實現方式,使用了偏向鎖升級為輕量級鎖再升級到重量級鎖的方式,從而減低了鎖帶來的性能消耗。