public class Main { static volatile int age = 10; public int getAge() { return age; } public int setAge() { //age = age+2 线程不安全,因为 volatile 只能保证线程之间内存的可见性,但是不能保证线程操作的原子性 age = age+2; return age; } }
age 变量是存在于主内存的,多个线程之间操作 age ,其实只是操作 线程 对 age 拷贝的值【如果你没有加 volatile】,如果加了 volatile的话, 每次 getAge 都会从主内存中读取数据,而不是 去读取 线程拷贝 的 age 的副本