volatile 关键字能够解决内存可见性的问题,但是没办法解决原子性操作问题(不具备互斥性)。
当多个线程操作共享数据的时候,保证内存中变量的可见性。

和 synchronized 相比,是一种轻量级的同步策略。
volatile 可以保证一定的可排序性,反之 jvm 针对代码编译优化发送指令重排序。

总结
volatile 关键字能够保证内存可见性和指令重排,没办法保证原子性。

JMM Java 内存模型

Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了 Java 程序在各种平台下对内存的访问都能保证效果一致的机制及规范。

参考资料

JMM 和底层实现原理
JMM 描述