Volatile解密(volatile在内存中的语义)

  • 在多线程的程序中,如果想要设置一个共享变量的话,volatile 关键字无非是一个好的选择,首先我们先来看看volatile 的作用.

1. volatile的作用:

  • 被volatile修饰的变量值,会保证其操作的可见性,也就是说被修饰的变量会在更改后刷新至主内存中,保证单一线程更改会立刻将主内存中的数据更新.
    (java内存模型==>每个线程会有个工作内存,会将主内存中的数据复制到工作内存中.)

2.volatile的内存语义:

  • 对volatile变量的写操作我们称之为volatile写,这个动作会在指令序列中插入内存屏障对的指令(我们知道 虚拟机操作写操作其实是通过一系列指令进行的),在volatile写操作之前 会插入一个StoreStore屏障,在这之后则会插入一个StoreLoad屏障.

2.1StoreStore指令:

  • 禁止上面的普通写和下面的volatile写重排序.

2.2StoreLoad指令:

  • 防止上面的volatile写与下面的volatile读/写重排序

而在volatile读之前也会插入内存屏障.

2.3 LoadLoad指令:

  • 禁止下面的普通读操作与上面的volatile读重排序.

2.4 LoadStore指令:

  • 禁止下面的普通写操作与上面的volatile读重排序.

你可能感兴趣的:(Volatile解密(volatile在内存中的语义))