volatile解决Java指令重排的问题

决定一个人的一生,以及整个命运的,只是一瞬之间。——歌德

什么是指令重排呢?

指令重排是指在程序执行过程中, 为了性能考虑, 编译器和CPU可能会对指令重新排序.

int a = 1;//第一步
int b = a;//第二步
int c = 4;//第三步

这段代码第一步和第二步是不会被重排的。但是,第三步是可能会被重排的。
重排后的代码如下:

int c = 4;
int a = 1;
int b = a;

重排后的代码c的赋值被提前了。但是如果这个时候有另外一个线程用到了a变量的值,但是由于指令重排,导致了a的值没有被优先赋值,这时候,这个线程拿到的值就是0,很有可能就会导致程序出现莫名其妙的问题。

避免指令重排

避免指令重排的方法可以使用volatile关键字,这个关键字会限制编译器和cpu对变量进行指令重排,从而不影响结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值