volatile

volatile关键字只能用于修饰变量,可解决并发的可见性有序性问题,无法解决原子性问题。因此如果要执行并发 i++ 之类的操作, 应使用 synchronized 或原子类。

volatile 使用内存屏障来解决有序性可见性问题:

根据 JMM 模型,每个线程存在自己的工作内存,且线程间共用一个主内存。volatile修饰的变量在写入时,会使用store命令强制同步变量到主内存中;而在执行读操作的时候,会使用load命令强制从主内存中读取数据,以此解决可见性问题。