Volatile底层原理剖析

Volatile底层原理剖析

    • JMM
    • Volatile缓存可见性实现原理
    • 指令重排

JMM

Volatile底层原理剖析_第1张图片
Volatile底层原理剖析_第2张图片

Volatile缓存可见性实现原理

Volatile底层原理剖析_第3张图片
理解:lock前缀指令会锁定这块内存区域的缓存,当执行引擎修改将数据修改后并assign赋值到线程的工作内存时,会被迅速的加载到共享内存,即使修改数据后还有其他的业务,不用等待加载其他业务就直接将数据传回主内存,主要是一个时效性。在加载到主内存的过程中会经过主线(缓存一致性),其他线程监听着主线,如果监听到感兴趣的数据写回共享内存操作就会引起数据无效协议,即其他线程重新加载主存中的数据。

指令重排

我们知道为了提高程序执行的性能,编译器和执行器(处理器)通常会对指令做一些优化(重排序)。volatile通过内存屏障实现了防止指令重排的目的。同时lock前缀指令相当于一个内存屏障,它会告诉CPU和编译器先于这个命令的必须先执行,后于这个命令的必须后执行。

在每个volatile写操作的前面插入一个StoreStore屏障。
在每个volatile写操作的后面插入一个StoreLoad屏障。
在每个volatile读操作的后面插入一个LoadLoad屏障。
在每个volatile读操作的后面插入一个LoadStore屏障。

你可能感兴趣的:(java,多线程)