码迷,mamicode.com
首页 > 其他好文 > 详细

Atomic 的实现原理

时间:2019-04-06 09:20:57      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:nal   api   代码   直接   swap   nbsp   volatil   .com   阻塞   

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的问题

Atomic 的实现原理

标签:nal   api   代码   直接   swap   nbsp   volatil   .com   阻塞   

原文地址:https://www.cnblogs.com/drafire/p/10660765.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!