美文网首页
AtomicInteger源码分析

AtomicInteger源码分析

作者: wMeSlAx767 | 来源:发表于2018-05-12 22:14 被阅读35次

在Java的多线程开发中需要做一些同步的操作。
在java concurrent库中提供了一系列支持原子操作的类,在atomic包下。
这里分析其中的AtomicInteger源码,来看看他是如何实现原子操作的。

AtomicInteger源码比较简单,主要的操作是对一个int值进行加减操作。
但是其中应用到了一个神奇的类Unsafe.java.

Unsafe.java提供了一些列的方法支持对JVM内存的操作(当然了他提供的功能远远不止操作内存)。
你看的没错是直接的操作内存,这个对于习惯了写Java程序时由GC直接管理内存的我这个小白来说,简直是三观尽毁。

Unsafe.java竟然是反Java常规的,那么想要使用它也不是那么随便的。默认Unsafe.java只信任JDK中的类,所以在自定义的类中不能直接实例化这个类,当然你还是可以通过反射来获取该对象。(额,扯远了)

通过观察代码发现AtomicInteger的原子性就是通过Unsafe.java来实现的。主要代码如下:

private static final Unsafe unsafe = Unsafe.getUnsafe();
private static final long valueOffset;
static {    
      try {        
        valueOffset = unsafe.objectFieldOffset(AtomicInteger.class.getDeclaredField("value"));    
      } catch (Exception ex) { 
            throw new Error(ex);
      }
}

private volatile int value; //注意value变量的volatile属性

功能:

  • 获取Unsafe对象
  • 通过反射获取AtomicInteger类中value在内存中的位置。
public final boolean compareAndSet(int expect, int update) {   
       return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
}

功能:
通过CAS算法,设置value的值。CAS算法就是先比较value的值和expect的值是否相同,如果相同就设置update。如果不相同则设置失败。

这样就保证了,对value的原子操作。

相关文章

  • AtomicInteger源码分析

    在Java的多线程开发中需要做一些同步的操作。在java concurrent库中提供了一系列支持原子操作的类,在...

  • AtomicInteger源码分析

    **AtomicInteger** 是Java提供的原子操作类,其内部通过 **UnSafe** 工具类,使用 =...

  • AtomicInteger 源码分析

    var1,var2联合定位字段的内存地址 compareAndSwapInt 是CAS操作更新新值,当compar...

  • AtomicInteger 源码分析阅读

    序 阅读java源码可能是每一个java程序员的必修课,只有知其所以然,才能更好的使用java,写出更优美的程序,...

  • 源码分析之AtomicInteger

    AtomicInteger是java.util.concurrent.atomic包下的类,作用是提供原子操作In...

  • AtomicInteger 源码

    基础介绍 将内存值V修改为B,否则什么都不做。 CAS操作 CAS通过调用JNI的代码实现的。JNI:Java N...

  • 21.AtomicInteger、AtomicLong

    加减: 源码: U是Unsafe的对象。AtomicInteger的 getAndIncrement() 方法和 ...

  • CAS(Compare And Swap)神秘面纱(2)

    上一章中初步接触到了CAS的基础类AtomicInteger,那接下面我们要从源码角度分析内部如何保证安全的进行多...

  • 并发:AtomicInteger 源码

    Java中的AtomicInteger大家应该很熟悉,它是为了解决多线程访问Integer变量导致结果不正确所设计...

  • JDK源码 -- AtomicInteger

    一、概念 类定义: 继承了Number抽象类,说明是个数字类型。 实现了Serializable接口,可以进行序列...

网友评论

      本文标题:AtomicInteger源码分析

      本文链接:https://www.haomeiwen.com/subject/zbzhdftx.html