歡迎大家關注Java經驗分享,裡面大量BATJ面試題,Java技術乾貨、行業雜談,也歡迎大家投稿~
java經驗分享?zhuanlan.zhihu.com
1、什麼是CAS?
CAS:Compare and Swap,即比較再交換。
jdk5增加了並發包java.util.concurrent.*,其下面的類使用CAS演算法實現了區別於synchronouse同步鎖的一種樂觀鎖。JDK 5之前Java語言是靠synchronized關鍵字保證同步的,這是一種獨佔鎖,也是是悲觀鎖。
2、CAS演算法理解
對CAS的理解,CAS是一種無鎖演算法,CAS有3個操作數,內存值V,舊的預期值A,要修改的新值B。當且僅當預期值A和內存值V相同時,將內存值V修改為B,否則什麼都不做。
CAS比較與交換的偽代碼可以表示為:
do{
備份舊數據;
基於舊數據構造新數據;
}while(!CAS( 內存地址,備份的舊數據,新數據 ))
3、CAS開銷
前面說過了,CAS(比較並交換)是CPU指令級的操作,只有一步原子操作,所以非常快。而且CAS避免了請求操作系統來裁定鎖的問題,不用麻煩操作系統,直接在CPU內部就搞定了。但CAS就沒有開銷了嗎?不!有cache miss的情況。這個問題比較複雜,首先需要了解CPU的硬體體系結構: