zoukankan      html  css  js  c++  java
  • Java中的关键字volatitle

    一.作用:

       1. 保证被volatitle修饰的变量对所有的线程是可见的,即当一个线程修改了这个变量

        新值对其他线程来说是可以立即得知的,但运算非原子操作,不能保证并发下的安全性

        (即i=i++当读出i的值是最新的,但+的过程中i的值被其他线程改变了)

        普通变量的值在线程传递需要通过主内存来完成(即A线程修改一个普通变量的值,将值回写进内存,B线程在从主内存读取,新值对B线程才可见)

       2.禁止指令重排序优化

        volatitle修饰的变量读操作和普通变量几乎没有差别,写操作慢一些,比锁的开销低

        在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制

        在没有同步的情况下,编译器、处理器以及运行时等都可能对操作的执行顺序进行一些意想不到的调整。在缺乏足够同步的多线程程序中,要想对内存操作的执行顺序进行判断,无法得到正确的结论。

        这个看上去像是一个失败的设计,但却能使JVM充分地利用现代多核处理器的强大性能。例如,在缺少同步的情况下,Java内存模型允许编译器对操作顺序进行重排序,并将数值缓存在寄存器中。此外,它还允许CPU对操作顺序进行重排序,并将数值缓存在处理器特定的缓存中。

  • 相关阅读:
    Oracle SQL FAQ
    miniasp(no encode)
    请看用javascript设置和读取cookie的简单例子
    asp流下载(Stream)
    (企业公司)网站开发方案
    asp发消息并代多个附件上传(多对多关系)
    tabpage1
    crystal report (asp调用水晶报表实例)
    上海万千文化传播有限公司(网站项目策划书)
    访问和更新Cookies集合
  • 原文地址:https://www.cnblogs.com/2nao/p/6498717.html
Copyright © 2011-2022 走看看