谈谈你对 volatile 的理解

volatile是什么

volatile关键字在Java中是一个轻量级的同步机制,用于保证变量的可见性和防止指令重排序。它主要用于多线程环境下共享变量的访问,确保每个线程都能看到变量的最新值。volatile与synchronized不同,volatile是一个变量修饰符,只能用来修饰变量。无法修饰方法及代码块等。 volatile的用法比较简单,只需要在声明一个可能被多线程同时访问的变量时,使用volatile修饰就可以了。

static volatile  int temp =0;

此时temp变量也就具有可见和有序性。

volatile的特性

保证线程间的可见性

volatile关键字确保一个线程对变量的修改可以立即被其他线程看到。通常,在没有volatile时,一个线程对变量的修改可能会被缓存到线程本地的CPU缓存中,其他线程无法立即看到这种修改。而volatile变量会直接存储在主内存中,每次读取时都直接从主内存中读取最新的值,每次写入时也会直接写入主内存。

禁止指令重排序

volatile关键字可以禁止指令重排序优化。编译器和处理器在执行程序时,为了提高性能,可能会对指令进行重排序。在单线程环境下,这不会有问题,但在多线程环境下可能会导致严重的并发问题。用 volatile 修饰共享变量后,会在读、写共享变量时加入不同的内存屏障,阻止其他读写操作越过屏障,使得在写入volatile变量之前的指令不会被重排序到它之后,读取volatile变量之后的指令不会被重排序到它之前,从而达到阻止重排序的效果。

未使用volatile,出现指令重排现象

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mutig_s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值