1.原子性操作是不能被线程调度机制中断的操作。一旦开始,那么它就可以在发生“上下文切换”(切换到其他线程执行)之前执行完毕。即要不执行完,要不就不执行。使用原子性来代替同步很棘手且危险。
2.除去long和double之外的所有基本类型之上的简单操作,如读取和写入,原子性可以保证它们会被当做不可分(原子)的操作来操作内存。
3.但是JVM可以将64位(long和double变量)的读取和写入当做两个分离的32位操作来执行,这就产生了在一个读取和写入操作之间发生上下文切换,从而导致不同的任务可以看到不正确结果的可能性。(字撕裂)
4.使用volatile关键字修饰long和double变量时,就会获得原子性。
5.++/--这种操作在Java语言中并不是原子的。数值类的基本类型,进行数学运算后赋值也不是原子的。
6.Atomic系列的类(AtomicInteger、AtomicLong、AtomicReference等),主要是为了达成一个目标:使数值类的基本类型,进行数学运算后赋值,这两个连贯操作,具备原子性。但是一般情况下,应该使用锁以及同步控制,而不是依赖原子性。