1.
volatile关键字平常说的最多有两种作用: 1. 保存内存可见性 2.防止指令重排序.
2.
jvm在运行是会生成一条条的指令,在保证结果一致的情况下会重排序指令来优化速度,但是这会造成线程不安全的问题,所以可以定义volatile来防止jvm进行指令重排序.
3.
在多线程条件下,每个线程都有自己独立的工作内存,volatile关键字通过直接读写主内存来保证内存可见行.但是volatile只是能简化同步策略的验证,它不能保证变量的操作如 i++ 等为原子性,所以必要情况下还是是用 synchronized关键字更稳妥一些.