zoukankan      html  css  js  c++  java
  • 彻底理解voliate

    1.voliate简介

    在上一篇文章中我们深入理解了java关键字synchronized,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其中奥妙,我们来共同探讨下.

    通过上一篇的文章我们了解到synchronized是阻塞同步的,在线程竞争激烈的情况下会升级为重量级锁。而voliate就可以说是java虚拟机提供的最轻量级的同步锁。但它同时不容易被正确理解,也至于在并发编程中有很多程序员遇到线程安全的问题就会使用sychronized。Java内存模型告诉我们,各个线程会将共享变量从主内存拷贝到工作内存,然后执行引擎会基于工作内容中的数据进行操作处理。线程在工作内存进行操作后何时会写到主内存中?这个时机对于普通变量是没有规定的,而针对voliate修饰的变量给java虚拟机特殊的约定,线程对voliate变量的修改会立即被其他线程感知,既不会出现数据的可见性。

    2.voliate实现原理

     volatile是怎样实现了?比如一个很简单的Java代码:

    instance = new Instancce() //instance是volatile变量

    在生成汇编代码时会在volatile修饰的共享变量进行写操作的时候会多出Lock指令(具体的大家可以使用一些工具去看一下,这里我就把结果说出来)。我们想这个Lock指令肯定有神奇的地方,那么Lock前缀的指令在多核处理器下会发生什么事?主要由两个方面的影响:

    1. 将当前处理器缓存行的数据写回系统内存;
    2. 这个写回内存的操作会使得其他CPU里缓存了该内存地址的数据无效
  • 相关阅读:
    BZOJ3156 防御准备
    BZOJ1257 余数之和
    BZOJ1879 Bill的挑战
    BZOJ1811 mea
    phpcms列表页内容如何替换?
    如何解决wamp中数据库读取数据是???的情况?
    如何用phpcms将静态网页生成动态网页?
    简单介绍phpcms以及phpcms如何安装?
    cms基本概念(dedecms,phpcms)
    用php+mysql+ajax实现淘宝客服或阿里旺旺聊天功能 之 后台页面
  • 原文地址:https://www.cnblogs.com/pingping-joe/p/9270815.html
Copyright © 2011-2022 走看看