CAS
Compare And Swap.比較并交換.java中的同步器就是基于CAS技術實現的,為什么它能保證操作的同步性呢?因為是原子操作的一種,所以可以在多線程環境下來實現數據的交換操作不被打斷.
CAS的缺陷
ABA問題:
第一個線程來讀取變量A時被掛起;第二個線程過來操作A,將A賦值為B之后,并重新賦值為A;線程二完成操作;此時,對于線程一來說,所看到變量A的值是沒有變化的,但是實際上變量A已經修改了兩次.
上述情況還不是最壞情況.如果在一個隊列中,有三個指針元素分別順序的指向了三個內存地址.進行.當第一個線程操作第一個位置的指針元素時,線程被掛起.線程二過來進行了一大堆的pop和push操作,這時第一個位置的指針元素的數據.
CAS下ABA問題及優化方案
CAS的優點
它比鎖快.
Disruptor論文中講述了一個實驗:
這個測試程序調用了一個函數,該函數會對一個64位的計數器循環自增5億次。
機器環境:2.4G 6核
運算: 64位的計數器累加5億次
Method Time (ms) Single thread 300 Single thread with CAS 5,700 Single thread with lock 10,000 Single thread with volatile write 4,700 Two threads with CAS 30,000 Two threads with lock 224,000
所以,鎖的性能相對于CAS操作更加低.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70465.html
摘要:上一篇文章簡單介紹了在本地開發環境中搭建服務端和客戶端,對單點登錄過程有了一個直觀的認識之后,本篇將探討單點登錄的實現原理。因此引入服務端作為用戶信息鑒別和傳遞中介,達到單點登錄的效果。為該流程的實現類。表示對返回結果的處理。 上一篇文章簡單介紹了 CAS 5.2.2 在本地開發環境中搭建服務端和客戶端,對單點登錄過程有了一個直觀的認識之后,本篇將探討 CAS 單點登錄的實現原理。 一...
摘要:最終依舊使用來更新值。此時使用能更好地提升性能。適用于高并發情況下的計數操作,利用與相似的原理,以空間換時間,提高了實際的計數效率。 AtomicLong /** * Atomically increments by one the current value. * * @return the updated value */ public final long increme...
摘要:是大學發起的一個企業級的開源的項目,旨在為應用系統提供一種可靠的單點登錄解決方法屬于。實現原理是先通過的認證,然后向申請一個針對于的,之后在訪問時把申請到的針對于的以參數傳遞過去。后面的流程與上述流程步驟及以后步驟類似 CAS( Central Authentication Service )是 Yale 大學發起的一個企業級的、開源的項目,旨在為 Web 應用系統提供一種可靠的單點登...
摘要:獲取資源失敗,將該線程加入等待隊列尾部,標記為獨占模式。如果有剩余資源則會喚醒下一個線程,且整個過程忽略中斷的影響。 AQS概念及定義 ASQ:AbstractQueuedSynchronizer 它維護了一個volatile int state(代表共享資源)和一個FIFO線程等待隊列(多線程爭用資源被阻塞時會進入此隊列,有個內部類Node定義了節點。隊列由AQS的volatile成...
摘要:有了這個基礎,才能發揮作用,使得在節點取消和異常時能夠保證隊列在多線程下的完整性。 Doug Lea是JDK中concurrent工具包的作者,這位大神是誰可以自行google。 本文淺析ReentrantLock(可重入鎖)的原理 Lock接口 showImg(https://segmentfault.com/img/bV2671?w=276&h=176); Lock接口定義了這幾個...
閱讀 2220·2021-09-07 09:58
閱讀 3395·2019-08-30 14:07
閱讀 1308·2019-08-29 12:32
閱讀 672·2019-08-29 11:06
閱讀 3696·2019-08-26 18:18
閱讀 3735·2019-08-26 17:35
閱讀 1386·2019-08-26 11:35
閱讀 616·2019-08-26 11:35