一、首先你得了解synchronized(同步锁),atomiclong 可以理解是加了synchronized的long。
二、现在我们思考一下使用atomiclong 这个场景,必然是跟多线程有关,而且可能用于编写计数器。
三、了解JVM指令的,都知道如果赋值一个long变量,编译后,会产生多个JVM语言指令,如果处于多线程情况下对于这个变量进行加减操作会导致数据不一致。为避免此问题, Java 引入了原子变量 AtomicLong 。当一个线程正在操作一个原子变量时,即使其他线程也想要操作这个变量,类的实现中含有一个检查那步骤操作是否完成的机制。 基本上,操作获取变量的值,改变本地变量值,然后尝试以新值代替旧值。如果旧值还是一样,那么就改变它。如果不一样,方法再次开始操作。这个操作称为 Compare and Set (校对注:简称 CAS ,比较并交换的意思)。