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