更新時間:2020年12月08日17時01分 來源:傳智教育 瀏覽次數(shù):
Synchronized顯然是一個悲觀鎖,因為它的并發(fā)策略是觀的:不管是否會產(chǎn)生競爭,任何的數(shù)據(jù)操作都必須要加鎖、用戶態(tài)核心態(tài)轉(zhuǎn)換、維護鎖計數(shù)器和檢査是否有被阻塞的線程需要被喚醒等操作。隨著硬件指令集的發(fā)展,我們可以使用基于沖突檢測的樂觀并發(fā)策略。先進行操作,如果沒有其他線程征用數(shù)據(jù),那操作就成功了;如果共享數(shù)據(jù)有征用,產(chǎn)生了沖突,那就再進行其他的補償措施。這種樂觀的并發(fā)策略的許多實現(xiàn)不需要線程掛起,所以被稱為非阻塞同步。
樂觀鎖的核心算法是CAS( Comparand Swap,比較并交換),它涉及到三個操作數(shù):內(nèi)存值、預期值、新值。當且僅當預期值和內(nèi)存值相等時才將內(nèi)存值修改為新值。
這樣處理的邏輯是,首先檢查某塊內(nèi)存的值是否跟之前我讀取時的一樣,如不一樣則表示期間此內(nèi)存值已經(jīng)被別的線程更改過,舍棄本次操作,否則說明期間沒有其他線程對此內(nèi)存值操作,可以把新值設置給此塊內(nèi)存CAS具有原子性,它的原子性由CPU硬件指令實現(xiàn)保證,即使用JNI調(diào)用Native方法調(diào)用由C++編寫的硬件級別指令,JDK中提供了Unsafe類執(zhí)行這些操作。
猜你喜歡:
Spring AOP實現(xiàn)原理和常見代理的區(qū)別
下面是傳智教育公開的幾套Java課程,您可以下載和在線觀看學習,如果想深入學習java并想找到不錯的java開發(fā)相關工作,建議報班學習傳智教育Java高級軟件工程師課程。獲取【Java視頻教程+資料】加播妞:435946716。