Volatile关键字作用

1. 保证变量对所有线程的可见性

当一个变量被声明为volatile的时候,它会保证对这个变量的写操作会立即刷新到主存中,而对这个变量的读操作会直接从主存中读取,从而确保了多线程环境下对该共享变量访问的可见性。这意味着一个线程修改了volatile变量的值,其它线程能够立刻看到这个修改,不会受到各自线程工作内存的影响。

2. 禁止指令重排序

volatile关键字在java中主要通过内存屏障来禁止特定类型的指令重排序‘

写写屏障

在 对volatile变量执行写操作之前,会插入一个写屏障,确保了在该便写操作之前的所有普通写操作都已完成,防止了这些写操作被移到volatile写操作之后。

读写屏障

在对volatile变量执行读操作后,会插入一个读屏障,它确保了对volatile变量的读操作之后的所有普通读操作都不会被提前到volatile读之前执行,保证了读到的数据都是最新的。

写读屏障

发生在volatile写之后和volatile读之前,这个屏障确保了volatile写操作之前的所有内存操作都不会被重排序到,也确保了volatile读操作之后的所有内存操作都不会被重排序到volatile写之前。

https://blog.meowrain.cn/api/i/2025/07/04/qgo86j-1.webp


相关内容

0%