volatile关键字有两个作用:
- 保证内存可见性:基于屏障指令实现,即当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。当一个变量被声明为volatile时,编译器和处理器会注意到这个变量可能会被其他线程并发地访问。这样可以避免线程之间的数据竞争,并确保多线程环境下变量的值是最新的。
- 保证有序性:禁止指令重排序。编译时 JVM 编译器遵循内存屏障的约束,运行时靠屏障指令组织指令顺序。避免编译器优化,导致指令重排序。
volatile是非原子性的。
volatile关键字有两个作用:
volatile是非原子性的。