对于涉及共享变量访问的操作,若该操作从其执行线程以外的任意线程来看是不可分割的,那么该操作就具有原子性。原子操作是多线程环境下的一个概念,它是针对访问共享变量的操作而言的。原子操作的“不可分割”包括以下两层含义:
理解原子操作这个概念还需要注意以下两点:
总的来说,Java中有两种方式来实现原子性:
Java语言中,long和double以外的任何类型(包括引用类型)的变量的写操作都是原子操作,这点由Java语言规范规定,由JVM具体实现。而对于long和double型变量通过使用volatile关键字保证其写操作具有原子性。Java语言中对任何变量的读操作都具有原子性。
volatile仅能够保障变量写操作的原子性,它并不能保障其他操作(比如read-modify-write和check-then-act)的原子性。
原文:https://www.cnblogs.com/i-hard-working/p/12142979.html