码迷,mamicode.com
首页 > 其他好文 > 详细

Volatile关键字

时间:2018-11-15 17:15:37      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:多线程   技术   lse   释放   ola   简单的   结果   png   赋值   

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

  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关键字

标签:多线程   技术   lse   释放   ola   简单的   结果   png   赋值   

原文地址:https://www.cnblogs.com/zjyingchang/p/9964221.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!