volatile只能作用于变量,保证了操作可见性和有序性,不保证原子性。
在Java的内存模型中分为主内存和工作内存,Java内存模型规定所有的变量存储在主内存中,每条线程都有自己的工作内存。
主内存和工作内存之间的交互分为8个原子操作:
- lock - unlock - read - load - assign - use - store - write - volatile修饰的变量,只有对volatile进行assign操作,才可以load,只有load才可以use,这样就保证了在工作内存操作volatile变量,都会同步到主内存中。