1. CAS實(shí)現(xiàn)原理
CAS是Compare And Swap的縮寫,意思就是比較并交換。它是無鎖化的實(shí)現(xiàn),是經(jīng)典的樂觀鎖。
synchronized是一種悲觀鎖,會(huì)導(dǎo)致其它所有需要鎖的線程掛起,等待持有鎖的線程釋放鎖。樂觀鎖就是不加鎖而是假設(shè)沒有沖突而去完成某項(xiàng)操作,如果因?yàn)闆_突失敗就重試,直到成功為止。樂觀鎖的機(jī)制就是CAS。
CAS操作很簡單,它包含三個(gè)操作數(shù):內(nèi)存地址V、預(yù)期原值A(chǔ)、新值B。
先比較內(nèi)存地址V處的值和預(yù)期原值A(chǔ)是否相等,如果相等就將內(nèi)存地址V處更新為新值B。
在配合循環(huán)使用時(shí),若CAS操作失敗,會(huì)循環(huán)執(zhí)行或到達(dá)某個(gè)終止處。此操作配合循環(huán)使用時(shí),又稱為自旋鎖的實(shí)現(xiàn)方式。
2. CAS存在的問題
?、?ABA問題 解決辦法: - 加時(shí)間戳 - 加版本號
?、?循環(huán)開銷大 CAS是樂觀鎖,如果線程比較多,資源搶占激烈,命中率低的情況下,不斷的循環(huán)會(huì)不斷的消耗資源。實(shí)際上,可以設(shè)置最大循環(huán)數(shù),達(dá)到最大循環(huán)數(shù)還沒有占有資源就自動(dòng)放棄,避免無限的循環(huán)。
③ 只能保證一個(gè)共享變量的原子操作。