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的信息
  • 在并发时可以保证读取的最新的,但是不能保证对变量的操作是互斥以及顺序执行的
相关文章
|
5月前
|
缓存 编译器 C语言
一起来探讨volatile关键字
在C语言中,volatile是一个关键字,用于告诉编译器不要对被声明为volatile的变量做优化,以确保每次对该变量的读写都直接操作内存。
|
缓存 安全 Java
【volatile关键字】
【volatile关键字】
|
存储 缓存 Java
volatile 关键字说明
volatile 关键字说明
48 0
|
2月前
|
存储 Java 编译器
|
SQL 缓存 Java
Volatile关键字介绍
Volatile关键字介绍
Volatile关键字介绍
|
存储 缓存 Java
volatile关键字再理解
volatile关键字再理解
volatile关键字再理解
|
SQL 缓存 安全
深入理解volatile关键字
深入理解volatile关键字
191 0
深入理解volatile关键字
|
缓存 前端开发 Java
volatile关键字有什么用?
volatile关键字有什么用?
volatile关键字有什么用?
|
缓存 安全 算法
你应该知道的 volatile 关键字(上)
不管是在面试还是实际开发中 volatile 都是一个应该掌握的技能。 首先来看看为什么会出现这个关键字。
|
SQL 缓存 安全
volatile 关键字详解(下)
本文主要是讲解 volatile 关键字的使用,首概括它的三大特征,然后引入 JMM 模型,结尾我们解释了单例模式(懒汉模式)中为什么要用 volatile。
151 0
volatile 关键字详解(下)