<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 1. CAS 全稱 CompareAndSwap cpu并發原語 AtomicInteger CAS =》UnSafe =》 CAS底層思想=》ABA問題 =》原子引用更新=》避免ABA問題 ## 1.1 比較并交換 CompareAndSet 線程拿到的值和主內存中的值一致, 就將要寫入的值寫入到主內存,否則就修改失敗。 ## 1.2 CAS 底層原理?如果知道,談談你對UnSafe的理解? 使用 Java中的sun.misc.Unsafe 類 這個類的方法都是native的,完全依賴于硬件的功能,通過它實現了原子操作。CAS是一條CPU的原子指令,執行是連續的,執行過程中不允許被打斷,不會造成數據不一致問題。 ## 1.3 CAS 缺點 ### 1.3.1 循環時間長開銷很大 如果CAS失敗,會一直進行嘗試自旋(do while 方式),如果長時間不成功,會一直循環,對cpu影響大。 ### 1.3.2 只能保證一個共享變量的原子操作 ### 1.3.3 ABA問題 T1 T2 倆個線程從主內存中都拿到的變量是A,T1比較慢,T2 把A改成了B,并寫入到主內存,又來了個T3,拿到主內存 B并改成A寫入到主內存,這時候T1執行完成值改為了1,發現主內存還是A和自己當時拿到的值一致,就將1寫入主內存成功。但是實際上主內存的值已經從出現過A=》B=》A的過程。就是一個線程往主內存寫入數據時,發現主內存中的值和線程當時拿到的值是相同的,符合CAS的邏輯,但是實際上主內存中的這個值已經修改過多次,只能當這個線程去寫入時,剛好和線程當時拿到的值一致。中間過程中值可能已經被改動過了。 #### ABA 解決方式 版本號,修改一次版本號就增加一次。比如 elasticsearch 中數據每更新一次,版本號字段就加一
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看