zoukankan      html  css  js  c++  java
  • Java volatile关键字的作用

    对一个变量添加volatile修饰,可以实现以下功能:

    1. 对这个变量的修改都会即时被写回内存,保证任何其他线程在读取的都是都读到的是实时值;
      Java中,变量都是保存在主内存中的,当线程访问变量时,都是从主内存拷贝一份到自己的工作内存,修改完值后再写回主内存。使用volatile可以保证线程在修改后,其他线程可以及时的读到新值。
    2. 不保证原子性;
      读取-修改-写入为非原子性操作,有可能A线程在写入的过程中,B线程也要写入,此时即使加入了volatile,但是由于读-修改的过程已完成,线程B不再从内存拿数据,导致线程B覆盖了A的修改。
    3. 该变量的代码不会被重排。
      在对被volatile修饰的变量进行访问时,会在前加上一个内存屏障的语句,使其前后的指令不会被顺序更改。

    volatile可以保证单个操作的原子性,但是像i++这种操作,不是原子性的,就不能实现线程安全。

  • 相关阅读:
    【微服务架构】SpringCloud之Ribbon
    SpringCloud之Eureka(注册中心集群篇)
    Eureka简介
    两行代码 搞定计数
    HBase详细概述
    电商项目介绍---说的很好
    面试:----Nginx的一理解
    redis介绍
    Linux操作系统介绍
    什么是Solr
  • 原文地址:https://www.cnblogs.com/pravez/p/12518980.html
Copyright © 2011-2022 走看看