站長資訊網
        最全最豐富的資訊網站

        深入了解java之CAS詳解

        本篇文章給大家帶來了關于java的相關問題,其中主要介紹了關于CAS的相關問題,CAS(compare and swap),比較并交換,可以解決多線程并行情況下使用鎖造成性能損耗的一種機制,希望對大家有幫助。

        深入了解java之CAS詳解

        推薦學習:《java教程》

        CAS解釋:

        CAS(compare and swap),比較并交換。可以解決多線程并行情況下使用鎖造成性能損耗的一種機制.CAS 操作包含三個操作數—內存位置(V)、預期原值(A)和新值(B)。如果內存位置的值與預期原值相匹配,那么處理器會自動將該位置值更新為新值。否則,處理器不做任何操作。一個線程從主內存中得到num值,并對num進行操作,寫入值的時候,線程會把第一次取到的num值和主內存中num值進行比較,如果相等,就會將改變后的num寫入主內存,如果不相等,則一直循環對比,知道成功為止。

        CAS產生:

        在修飾共享變量的時候經常使用volatile關鍵字,但是volatile值有可見性和禁止指令重拍(有序性),無法保證原子性。雖然在單線程中沒有問題,但是多線程就會出現各種問題,造成現場不安全的現象。所以jdk1.5后產生了CAS利用CPU原語(不可分割,連續不中斷)保證現場操作原子性。

        CAS應用:

        在JDK1.5 中新增java.util.concurrent(JUC)就是建立在CAS之上的。相對于對于synchronized這種鎖機制,CAS是非阻塞算法的一種常見實現。所以JUC在性能上有了很大的提升。

        比如AtomicInteger類,AtomicInteger是線程安全的的,下面是源碼

        深入了解java之CAS詳解

        深入了解java之CAS詳解

        進入unsafe看到do while自循環,這里的自循環,就是在 判斷預期原值 如果與原來的值不符合,會再循環取原值,再走CAS流程,直到能夠把新值賦值成功。

        CAS優點

        cas是一種樂觀鎖的思想,而且是一種非阻塞的輕量級的樂觀鎖,非阻塞式是指一個線程的失敗或者掛起不應該影響其他線程的失敗或掛起的算法。

        CAS 缺點

        1. 循環時間長開銷大,占用CPU資源。如果自旋鎖長時間不成功,會給CPU帶來很大的開銷。如果JVM能支持處理器提供的pause指令那么效率會有一定的提升,pause指令有兩個作用,第一它可以延遲流水線執行指令(de-pipeline),使CPU不會消耗過多的執行資源,延遲的時間取決于具體實現的版本,在一些處理器上延遲時間是零。第二它可以避免在退出循環的時候因內存順序沖突(memory order violation)而引起CPU流水線被清空(CPU pipeline flush),從而提高CPU的執行效率。
        2. 只能保證一個共享變量的原子操作。當對一個共享變量執行操作時,我們可以使用循環CAS的方式來保證原子操作,但是對多個共享變量操作時,循環CAS就無法保證操作的原子性,這個時候就可以用鎖,或者有一個取巧的辦法,就是把多個共享變量合并成一個共享變量來操作。比如有兩個共享變量i=2,j=a,合并一下ij=2a,然后用CAS來操作ij。從Java1.5開始JDK提供了AtomicReference類來保證引用對象之間的原子性,你可以把多個變量放在一個對象里來進行CAS操作。
        3. ABA問題

        解決ABA問題(如果值考慮收尾,不考慮過程可以忽略改問題)

        1. 添加版本號
        2. AtomicStampedReference
          深入了解java之CAS詳解

        從Java1.5開始JDK的atomic包里提供了一個類AtomicStampedReference來解決ABA問題。這個類的compareAndSet方法作用是首先檢查當前引用是否等于預期引用,并且當前標志是否等于預期標志,如 全部相等,則以原子方式將該引用和該標志的值設置為給定的更新值。

        CAS使用的時機

        1. 線程數較少、等待時間短可以采用自旋鎖進行CAS嘗試拿鎖,較于synchronized高效。
        2. 線程數較大、等待時間長,不建議使用自旋鎖,占用CPU較高

        推薦學習:《java學習教程》

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 97精品人妻一区二区三区香蕉| 亚洲av无码成人精品区在线播放 | 无码精品人妻一区| 国产精品福利网站导航| 亚洲国产精品无码专区在线观看| 久久精品国产福利国产琪琪| 久久国产精品一区二区| 国产精品区一区二区三在线播放| 亚洲欧美国产精品第1页| 久久99精品久久久久久齐齐| 亚洲成人精品久久| 51午夜精品免费视频| 青青青国产精品一区二区| 亚洲国产精品无码久久| 亚洲精品无码日韩国产不卡?V| 精品国产AⅤ一区二区三区4区| 97视频在线精品国自产拍| 久久国产精品久久| 精品视频第一页| 国产精品久久久久久久久| 97久久超碰国产精品2021| 国产精品免费无遮挡无码永久视频 | 精品三级AV无码一区| 亚洲色精品vr一区二区三区| 午夜精品久久影院蜜桃| 午夜亚洲av永久无码精品| 亚洲av午夜成人片精品电影| 日韩欧美亚洲国产精品字幕久久久 | 一色屋精品视频在线观看| 亚洲精品国产福利一二区| 无码乱码观看精品久久| 日本精品久久久久久久久免费| 人妻偷人精品成人AV| 亚洲爆乳精品无码一区二区| 欧美国产成人精品一区二区三区 | 日韩精品一区二区三区中文字幕| 久久国产午夜精品一区二区三区| 国产午夜精品一区二区三区不卡| 国内精品国语自产拍在线观看| 久久精品国产99国产精品| 网友偷拍日韩精品|