原子操作时不需要synchronized,因为这个操作不会因为开启了多线程被其他线程所打断,从而造成在一个线程操作时,会有其他线程对其操作结果产生影响.
比如说CPU A(CPU A上所运行的进程,以下同)从内存单元把当前计数值⑵装载进它的寄存器中;
CPU B从内存单元把当前计数值⑵装载进它的寄存器中。
CPU A在它的寄存器中将计数值递减为1;
CPU B在它的寄存器中将计数值递减为1;
CPU A把修改后的计数值⑴写回内存单元。
CPU B把修改后的计数值⑴写回内存单元
最终我们得到的计数值还是1,这其实已经违背了我们在CPUA上所要运行的结果,所以这就产生了一些线程问题,但是这种情况只能发生在非原子操作,因为线程的插入都是发生在两个机器指令之间,我们进行的赋值操作本质就是一个机器指令,在指令运行期间不能被打断,必须等待指令运行完毕,所以它不存在线程问题,但是运算程序,进行编译之后实际上就是多条指令,因此在指令之间可以插入其他线程对结果产生一些影响.