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