volatile关键字

简介: volatile关键字@Date 2016.06.20共享变量多个线程之间能够被共享的变量存放在堆内存中的实例变量,静态变量,数组变量内存屏障CPU指令,用于实现对内存操作的顺序限制Volatile确保所有线程看到...

volatile关键字

@Date 2016.06.20

共享变量

  • 多个线程之间能够被共享的变量
  • 存放在堆内存中的实例变量,静态变量,数组变量

内存屏障

  • CPU指令,用于实现对内存操作的顺序限制

Volatile

  • 确保所有线程看到这个变量的值是一致的
  • 不会引起线程上下文的切换和调度
  • JVM就会向处理器发送一条Lock前缀的指令
  • 缓存一致性协议: 当处理器发现自己缓存行对应的内存地址被修改,会将当前处理器的缓存行设置成无效状态
  • 将当前处理器缓存行的数据会写回到系统内存
  • 写回内存的操作会引起在其他CPU里缓存了该内存地址的数据无效
  • 大多数处理器高速缓存行是64个字节宽
  • 保证了可见性(对于一个变量i,多个线程同时去操作(比如++),i的值一定是0->1->2->3,而如果不加volatile则i的值可能是0->1->1->2)
  • 不保证顺序性和原子性(volatile不会锁住变量,你再对第一个变量i做完操作之后,下一个volatile变量j可能已经发生改变了)

补充

  • 强制线程去主存中读取Heap的信息
  • 在并发时可以保证读取的最新的,但是不能保证对变量的操作是互斥以及顺序执行的
相关文章
|
测试技术
圈复杂度问题之什么是“气功波”式代码,它有什么问题,如何解决
圈复杂度问题之什么是“气功波”式代码,它有什么问题,如何解决
|
编译器 C++
『C++成长记』运算符重载
『C++成长记』运算符重载
|
存储 SQL JSON
Open Policy Agent(OPA) 【1】介绍(2)
Open Policy Agent(OPA) 【1】介绍(2)
|
大数据
健康医疗大数据应用 传统医疗面临挑战
回顾历史,“大数据”这个时髦的词汇,在物理学、生物学、环境生态学等领域,以及军事、金融、通讯等行业存在已有时日。但是真正引起人们高度关注的,还是因为近年来互联网和信息行业的迅速发展所致。数据,已经渗透到当今每一个行业和业务职能领域,成为重要的生产因素。
1669 0
|
4天前
|
Android开发 开发者 Windows
这是我设计的一种不关机,然后改造操作系统的软件设计思路2.0版本
本文介绍了在不重启系统的情况下实现操作系统改造的两种方案。第一种方案通过SLFM Recovery模式,在独立于操作系统的最高权限环境下完成系统更新与改造,并支持断电恢复与失败回滚。第二种方案采用多分区机制,通过SLFM套件在独立分区中完成系统改造,适用于可中断与不可中断服务场景,确保系统更新过程的安全与稳定。
221 132

热门文章

最新文章