Atomic 的實現原理


1、直接操作內存,使用Unsafe 這個類

2、使用 getIntVolatile(var1, var2) 獲取線程間共享的變量

3、采用CAS的嘗試機制(核心所在),代碼如下:

  public final int getAndAddInt(Object var1, long var2, int var4) {
        int var5;
        do {
            var5 = this.getIntVolatile(var1, var2);
        } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));

        return var5;
    }

 

可以看到這個do .... while {!this.compareAndSwapInt(var1, var2, var5, var5 + var4)} 。不斷地使用CAS進行重試,直到執行成功為止。這里是一個樂觀鎖的操作。

4、使用Atomic ,是在硬件上、寄存器進行阻塞,而不是在線程、代碼上阻塞。

5、這個是通俗說法ABA的問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM