原子性:spa
不能被线程调度器中断的操做,好比"a = 1;"和 "return a;"这样的操做都具备原子性线程
可见性:blog
相似"a += b"这样的操做不具备原子性,由于在某些JVM中"a += b"可能要通过这样三个步骤:内存
(1)取出a和b同步
(2)计算a+b方法
(3)将计算结果写入内存im
若是有两个线程t1,t2在进行这样的操做。t1在第二步作完以后还没来得及把数据写回内存就被线程调度器中断了,因而t2开始执行,t2执行完毕后t1又把没有完成的第三步作完。这个时候就出现了错误,至关于t2的计算结果被无视掉了。因此上面的买碘片例子在同步add方法以前,实际结果老是小于预期结果的,由于不少操做都被无视掉了。数据
相似的,像"a++"这样的操做也都不具备原子性:img