二維碼
        企資網(wǎng)

        掃一掃關(guān)注

        當(dāng)前位置: 首頁(yè) » 企業(yè)資訊 » 咨詢 » 正文

        你知道什么是CAS嗎?

        放大字體  縮小字體 發(fā)布日期:2021-12-24 11:38:49    作者:付嘉歆    瀏覽次數(shù):70
        導(dǎo)讀

        【死記硬背】CAS英文是Compare And Swap/Set,即比較并交換。CAS得實(shí)現(xiàn)原理:它包含3個(gè)參數(shù) CAS(V,E,N)。V 表示要更新得變量(內(nèi)存值),E表示預(yù)期值(舊得),N表示新值。如果內(nèi)存位置V得值與預(yù)期原值E相匹配,那么處理

        【死記硬背】

        CAS英文是Compare And Swap/Set,即比較并交換。

        CAS得實(shí)現(xiàn)原理:它包含3個(gè)參數(shù) CAS(V,E,N)。V 表示要更新得變量(內(nèi)存值),E表示預(yù)期值(舊得),N表示新值。如果內(nèi)存位置V得值與預(yù)期原值E相匹配,那么處理器會(huì)自動(dòng)將該位置值更新為新值N,返回true。否則處理器不做任何操作,返回false。

        CAS得缺點(diǎn):只能保證對(duì)一個(gè)變量得原子性操作,長(zhǎng)時(shí)間自旋會(huì)給CPU帶來(lái)壓力,可能會(huì)存在ABA問(wèn)題。

        什么是ABA問(wèn)題:

        CAS實(shí)現(xiàn)一個(gè)重要前提需要取出內(nèi)存中某時(shí)刻得數(shù)據(jù),而在下一時(shí)刻比較并替換,那么在這個(gè)時(shí)間差類會(huì)導(dǎo)致數(shù)據(jù)得變化。比如說(shuō)一個(gè)線程one從內(nèi)存位置V中取出A,這時(shí)候另一個(gè)線程two也從內(nèi)存中取出A,并且two進(jìn)行了一些操作變成了B,然后 two又將V位置得數(shù)據(jù)變成 A,這時(shí)候線程one進(jìn)行CAS操作發(fā)現(xiàn)內(nèi)存中仍然是A,然后 one 操作成功。盡管線程one 得 CAS操作成功,但是不代表這個(gè)過(guò)程就是沒(méi)有問(wèn)題得。部分樂(lè)觀鎖得實(shí)現(xiàn)是通過(guò)版本號(hào)(version)得方式來(lái)解決ABA問(wèn)題,樂(lè)觀鎖每次在執(zhí)行數(shù)據(jù)得修改操作時(shí),都會(huì)帶上一個(gè)版本號(hào),一旦版本號(hào)和數(shù)據(jù)得版本號(hào)一致就可以執(zhí)行修改操作并對(duì)版本號(hào)執(zhí)行+1 操作,否則就會(huì)失敗。因?yàn)槊看尾僮鞯冒姹咎?hào)都會(huì)隨之增加,所以不會(huì)出現(xiàn)ABA問(wèn)題,因?yàn)榘姹咎?hào)只會(huì)增加不會(huì)減少。

        【答案解析】

        AtomicInteger類中有CAS得使用,樣例代碼如下:

        import java.util.concurrent.atomic.AtomicInteger;public class CASTest { public static void main(String[] args) { // 創(chuàng)建一個(gè)原子類 AtomicInteger atomicInteger = new AtomicInteger(5); System.out.println(atomicIntegerpareAndSet(5, 前年) + "\t current data: " + atomicInteger.get()); System.out.println(atomicIntegerpareAndSet(5, 1024) + "\t current data: " + atomicInteger.get()); }}

        【溫馨提示】

        點(diǎn)贊+收藏文章,我并私信回復(fù)【面試題解析】,即可百分百免費(fèi)領(lǐng)取樓主得所有面試題資料!

         
        (文/付嘉歆)
        免責(zé)聲明
        本文僅代表作發(fā)布者:付嘉歆個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問(wèn)題,請(qǐng)及時(shí)聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
         

        Copyright ? 2016 - 2025 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號(hào)

        粵ICP備16078936號(hào)

        微信

        關(guān)注
        微信

        微信二維碼

        WAP二維碼

        客服

        聯(lián)系
        客服

        聯(lián)系客服:

        在線QQ: 303377504

        客服電話: 020-82301567

        E_mail郵箱: weilaitui@qq.com

        微信公眾號(hào): weishitui

        客服001 客服002 客服003

        工作時(shí)間:

        周一至周五: 09:00 - 18:00

        反饋

        用戶
        反饋

        主站蜘蛛池模板: 一区二区高清在线| 国产成人一区二区在线不卡| 亚洲欧洲无码一区二区三区| 一区二区三区波多野结衣 | 国产综合精品一区二区| 免费av一区二区三区| 黑人一区二区三区中文字幕| 91精品一区二区综合在线| 国产一区二区三区在线视頻| 精品一区二区91| 国产精品视频一区国模私拍| 蜜桃臀无码内射一区二区三区| 国产一区二区三区在线视頻| 精品国产免费一区二区三区| 日韩精品一区二区三区视频| 天天躁日日躁狠狠躁一区| 亚洲日韩国产欧美一区二区三区| 久久国产精品无码一区二区三区| 中文字幕一精品亚洲无线一区| 538国产精品一区二区在线| 日韩国产一区二区| 国产在线一区二区视频| 国产MD视频一区二区三区| 精品乱人伦一区二区| 精品一区二区三区AV天堂| 日本一区视频在线播放| 一区二区三区www| 一区二区三区高清在线| 国产成人精品无人区一区| 国产精品福利区一区二区三区四区 | 精品女同一区二区| 日韩一区二区三区视频久久| 一本岛一区在线观看不卡| 久久一区二区三区免费| 日本不卡一区二区视频a| 久久无码人妻一区二区三区午夜| 麻豆一区二区三区精品视频| 亚洲欧洲日韩国产一区二区三区| 亚洲AV无码一区二区三区网址| 国产一区二区不卡老阿姨| 精品一区二区91|