在JVM中long和double型变量都是占用8个字节空间存储的, 而在读写时,是以4字节为单位操作的; 也就是要写入一个long型数据, 需要分别写入高位和低位, 共2次完成....所以long和double是天生的线程不安全; 要在线程间共享long或者double变量, 必须放在锁内或synchronized代码块中执行, 或是将变量声明为volatile类型....因为每次读写都是2次操作,相对AtomicInteger而言效率是较低的....LongAdder
JDK8中, 为优化AtomicLong在高并发下的低效问题, 引入了一个新的Long型原子操作类LongAdder, 它比AtomicLong拥有更好的性能, 当然代价就是消耗更多的空间...从性能上说, 在并发量高的情况下, LongAdder造成锁的概率更低, 性能更高, 但在get时可能有误差. 一般情况下, AtomicLong都是可以满足性能需要的.