教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

什么是CAS?有什么特性?

更新時(shí)間:2020年12月08日17時(shí)01分 來源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

Synchronized顯然是一個(gè)悲觀鎖,因?yàn)樗牟l(fā)策略是觀的:不管是否會(huì)產(chǎn)生競爭,任何的數(shù)據(jù)操作都必須要加鎖、用戶態(tài)核心態(tài)轉(zhuǎn)換、維護(hù)鎖計(jì)數(shù)器和檢査是否有被阻塞的線程需要被喚醒等操作。隨著硬件指令集的發(fā)展,我們可以使用基于沖突檢測的樂觀并發(fā)策略。先進(jìn)行操作,如果沒有其他線程征用數(shù)據(jù),那操作就成功了;如果共享數(shù)據(jù)有征用,產(chǎn)生了沖突,那就再進(jìn)行其他的補(bǔ)償措施。這種樂觀的并發(fā)策略的許多實(shí)現(xiàn)不需要線程掛起,所以被稱為非阻塞同步。

樂觀鎖的核心算法是CAS( Comparand Swap,比較并交換),它涉及到三個(gè)操作數(shù):內(nèi)存值、預(yù)期值、新值。當(dāng)且僅當(dāng)預(yù)期值和內(nèi)存值相等時(shí)才將內(nèi)存值修改為新值。

這樣處理的邏輯是,首先檢查某塊內(nèi)存的值是否跟之前我讀取時(shí)的一樣,如不一樣則表示期間此內(nèi)存值已經(jīng)被別的線程更改過,舍棄本次操作,否則說明期間沒有其他線程對(duì)此內(nèi)存值操作,可以把新值設(shè)置給此塊內(nèi)存CAS具有原子性,它的原子性由CPU硬件指令實(shí)現(xiàn)保證,即使用JNI調(diào)用Native方法調(diào)用由C++編寫的硬件級(jí)別指令,JDK中提供了Unsafe類執(zhí)行這些操作。


猜你喜歡:

什么是負(fù)載均衡?負(fù)載均衡原理詳解

Spring AOP實(shí)現(xiàn)原理和常見代理的區(qū)別

網(wǎng)絡(luò)通信協(xié)議有哪些?

Java培訓(xùn)課程





下面是傳智教育公開的幾套Java課程,您可以下載和在線觀看學(xué)習(xí),如果想深入學(xué)習(xí)java并想找到不錯(cuò)的java開發(fā)相關(guān)工作,建議報(bào)班學(xué)習(xí)傳智教育Java高級(jí)軟件工程師課程。獲取【Java視頻教程+資料】加播妞1605146928606_課程資料.jpg:435946716。



0 分享到:
和我們在線交談!