Volatile你应该知道的事

2019-03-20  本文已影响0人  jiagf

写在前面

Volatile是Java虚拟机提供的最轻量的同步机制

概念

1.JAVA内存模型(JMM)

Java内存模型定义了线程和内存之间关系:线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,本地内存中存储了该线程以读 / 写共享变量的副本。本地内存是 JMM 的一个抽象概念,并不真实存在;它涵盖内存、缓存、寄存器以及其他的硬件和编译器优化

2.重排序

重排序是指编译器和处理器为了优化程序性能而对指令进行重排序的一种优化手段。

Java程序的几种重排序

编译器优化重排序:编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。

指令级并行的重排序:如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。

内存系统的重排序:处理器使用缓存和读写缓冲区,这使得加载和存储操作看上去可能是在乱序执行

3.Volatile语义

a.及时,不论是线程A或者线程B操作,他们读到的值都是当下最新的内存值

b.禁止指令重排序

任何一个程序的执行顺序错误都会影响到代码逻辑

使用场景

1.线程中可以外部修改的,控制逻辑的关键变量

2.单例模式中的instance

3.部分静态变量,按需

上一篇 下一篇

猜你喜欢

热点阅读