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