volatile

volatile

(不稳定的)

修饰共享变量(类的成员变量,类的静态成员变量)

volatile保证线程间的可见性

修饰共享变量,防止编译器等优化发生,让一个线程对共享变量的修改对另一个线程可见

static Boolean flag
new Thread(
	修改flag;
)
new Thread(
	while(flag){
		
	}
)

普通情况下,在JVM虚拟机中存在JIT(即时编译器)对代码做了优化,如果这个变量是在另一个线程中修改,那JIT会将动态的条件转成静态的条件

while(Flag){
}
改成
while(true){
}

解决方案

1,在VM参数中禁用JIT(不推荐)

2,在共享变量上添加volatile,告诉JIT不要做优化
volatile禁止指令重排序

修饰共享变量会在读写共享变量时加入不同屏障,阻止其他读写操作越过屏障,从而达到阻止重排序效果

@使用@JCStressTest注解引入框架进行线程测试

使用注解@Actor保证代码在同一个线程中执行

重排序

出现程序不按编译时的前后顺序执行得到结果的情况

操作屏障

被volatile修饰符修饰的变量会在对应位置生成屏障

写操作屏障

阻止上方其他的写操作越过屏障排到volatile屏障之下

下面的指令可以向上重排序

读操作屏障

阻止下方其他的读操作越过屏障排到volatile屏障之上

上面的指令可以向下重排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值