Skip to content

volatile

1.简介

这是Java的一个可以和synchronized各领风骚的关键字,在并发编程时好多程序员遇到线程安全的问题直接使用synchronized,但是这样有问题:synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁。而针对volatile修饰的变量给java虚拟机特殊的约定,线程对volatile变量的修改会立刻被其他线程所感知,即不会出现数据脏读的现象,从而保证数据的“可见性”。

2.原理

在生成汇编代码时,volatile修饰的变量在写操作时会多出一个lock前缀的命令,lock指令的作用:

  • 将当前缓存行的数据写回到系统内存并使得其他cpu缓存了该地址的指令无效
  • 当cpu发现本地缓存失效后将会重新从内存中读取该变量数据获取最新值

3.总结:

volatile变量可以通过“缓存一致性”协议保证每个线程都能获取到最新值,即满足数据的可见性。

Comments