java_并发_volatile关键字

Posted mexding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java_并发_volatile关键字相关的知识,希望对你有一定的参考价值。

java_并发_volatile关键字


1.volatile关键字的两层语义

  一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:

  1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。

  2)禁止进行指令重排序。



2.volatile的原理和实现机制

  前面讲述了源于volatile关键字的一些使用,下面我们来探讨一下volatile到底如何保证可见性和禁止指令重排序的。

  下面这段话摘自《深入理解Java虚拟机》:

  “观察加入volatile关键字和没有加入volatile关键字时所生成的汇编代码发现,加入volatile关键字时,会多出一个lock前缀指令”

  lock前缀指令实际上相当于一个内存屏障(也成内存栅栏),内存屏障会提供3个功能:

  1)它确保指令重排序时不会把其后面的指令排到内存屏障之前的位置,也不会把前面的指令排到内存屏障的后面;即在执行到内存屏障这句指令时,在它前面的操作已经全部完成;

  2)它会强制将对缓存的修改操作立即写入主存;

  3)如果是写操作,它会导致其他CPU中对应的缓存行无效。



















以上是关于java_并发_volatile关键字的主要内容,如果未能解决你的问题,请参考以下文章

并发编程__volatile关键字

Java Review - 并发编程_前置知识二

Java千百问_03基础语法(014)_volatile关键字有什么用

Java并发编程:volatile关键字解析

Java并发编程:volatile关键字解析(转载)

java并发系列-----Java并发:volatile关键字解析