volatile关键字

简介: volatile关键字

保证内存可见性


volatile关键字可以保证所有线程都能看到共享内存中最新的值,比如有一个共享变量a=10,当线程t1修改了a=11,那么t2线程将强行从主内存中读取新的值a=11,而不是读缓存中的a=10的值。这样就保证了内存的时效。


保证有序性


有序性是指我们的程序代码的执行应该要有一定的先后顺序,从而保证运行结果是正确的,但是Java在编译和运行期对代码的优化,有可能出现程序重排序(指令重排)的情况;


被volatile修饰的共享变量相当于屏障,屏障的作用是不允许指令随意重排;



不保证原子性


比如我们做 i++操作,多个线程同时对i进行++操作,那么其中一个线程可能获取的是多次++后的值,形成脏读。解决办法是用synchronized关键字把i变量锁住,因此,我们说volatile关键字并不能解决线程安全问题,即不能保证原子性。


相关文章
|
8月前
|
缓存 编译器
volatile关键字
volatile关键字
|
8月前
|
缓存 编译器 C语言
一起来探讨volatile关键字
在C语言中,volatile是一个关键字,用于告诉编译器不要对被声明为volatile的变量做优化,以确保每次对该变量的读写都直接操作内存。
|
缓存 安全 Java
【volatile关键字】
【volatile关键字】
|
存储 缓存 Java
volatile 关键字说明
volatile 关键字说明
59 0
|
存储 Java
浅谈Volatile关键字
该篇文章用来总结笔者对于Volatile关键字的理解,并不会太过深入的探讨。
142 0
浅谈Volatile关键字
|
SQL 缓存 Java
Volatile关键字介绍
Volatile关键字介绍
Volatile关键字介绍
|
编译器 程序员 C语言
C语言关键字详解(五)带你全面了解 volatile 关键字
C语言关键字详解(五)带你全面了解 volatile 关键字
391 0
C语言关键字详解(五)带你全面了解 volatile 关键字
|
SQL 缓存 安全
深入理解volatile关键字
深入理解volatile关键字
203 0
深入理解volatile关键字
|
缓存 安全 算法
你应该知道的 volatile 关键字(上)
不管是在面试还是实际开发中 volatile 都是一个应该掌握的技能。 首先来看看为什么会出现这个关键字。
|
安全 编译器
volatile 关键字详解(中)
本文主要是讲解 volatile 关键字的使用,首概括它的三大特征,然后引入 JMM 模型,结尾我们解释了单例模式(懒汉模式)中为什么要用 volatile。
151 0
volatile 关键字详解(中)