volatile

1.

volatile关键字平常说的最多有两种作用:  1. 保存内存可见性  2.防止指令重排序.

2.

jvm在运行是会生成一条条的指令,在保证结果一致的情况下会重排序指令来优化速度,但是这会造成线程不安全的问题,所以可以定义volatile来防止jvm进行指令重排序.

3.

在多线程条件下,每个线程都有自己独立的工作内存,volatile关键字通过直接读写主内存来保证内存可见行.但是volatile只是能简化同步策略的验证,它不能保证变量的操作如  i++  等为原子性,所以必要情况下还是是用 synchronized关键字更稳妥一些.

原文地址:https://www.cnblogs.com/lishuaiqi/p/11795315.html