Volatile关键字

Posted zjyingchang

tags:

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

在计算机中,数据的运算从读取到写入结果要经过以下几步:

  1.将变量从内存中读取;

  2.将变量写入cpu缓存中;

  3.由cpu运算器处理;

  4.对变量赋予新值;

  5.将变量写入缓存;

  6.将变量从缓存写入内存;

问题1:为什么说volatile变量是轻量级的锁呢,和锁的区别是什么呢?

  通过上述流程可以知道锁是锁住了一个代码块,及和锁对象有关的变量全被锁住了,不让其他线程读取,直到持有锁的线程将锁释放;

  volitale变量的特点:

      a. 1->2->3和4->5->6是连续的,正常的变量每一个步骤都是使用了一个内存屏障来隔离。

      b. 写入内存后会通知其他cpu缓存失效。

    流程如图:

        技术分享图片

 问题2:volitale的缺点?

    按照流程我们可以看出,如果是个正常的锁,那么所有的步骤都是没有其他线程干扰的,而volatile变量的处理和赋值动作不是连续的,

  因此,在多线程情况下就有可能两个线程都进行了相同的步骤,导致一个线程对内存写入的操作覆盖了另一个线程的操作。因此,缺点就是不够安全。

 思考:volitale变量的使用?

    通过其特点我们可以知道简单的使用如true or false 这样的命令是没有处理这一步的,即是读取后就直接赋值了。

     java对象的改变能够及时感知,当然volitale声明的只是一个对象引用,只是当引用发生变化时能够及时感知。

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

24.volatile关键字的作用volatile原理可见性内存屏障volatile性能transient

java里volatile关键字有啥特性?

并发之volatile关键字

C语言 中volatile关键字的用法

Volatile关键字

volatile关键字