volatile关键字的作用及使用场景

volatile是Java中的轻量级同步机制,提供可见性和禁止指令重排。它适用于简单并发场景,但无法保证线程安全。文章详细介绍了volatile的两个特性,并讨论了其性能和适用场景。
摘要由CSDN通过智能技术生成

volatile关键字是java虚拟机提供的最轻量级的同步机制。在并发的场景下,我们都习惯于使用synchronized锁进行同步,其实,有些简单的场景下,我们也可以使用volatile来代替,但volatile有它本身的使用规则,不能滥用,要结合它自身的特性把它应用于适合的场景下。下面就来简单叙述一下volatile关键字的作用,及其适用场景。

一、volatile的特性

被volatile修饰的变量将会有两个特性,第一是保证此变量对所有的线程的可见性;第二是禁止指令重排。

1、可见性

这里的可见性,指的是一条线程修改了被volatile修饰的变量的值后,新值对于其他线程也是立即得知的。
如下图,当某时刻线程T1对变量V作了B操作,那么线程T2、T3也可以马上感知到V被作了B操作。
在这里插入图片描述
熟悉jvm内存模型的童鞋,应该知道变量(不包括局部变量和方法变量)都是存在于主内存中,而每个线程对此变量的所有操作都必须通过工作内存,工作内存会不断的从主内存读取数据,或往主内存写入数据。在多线程对同一个变量进行操作时,会存在“可见性”问题。而volatile关键字来修饰变量,就是使得线程每次使用变量时都会强制先从主内存刷新到工作内存,每次修改变量时都会强制立刻把工作内存中发生的改变回写到主内存中。这样就实现了“当一个线程对变量操作时,其他线程都可以感知到”这样的说法。
那么,volatile就一定是线程安全了吗?然而并不是,vola

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值