0
点赞
收藏
分享

微信扫一扫

软考中级-软件设计师(九)数据库技术基础 考点最精简

唯米天空 2024-05-10 阅读 13

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屏障之上

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

举报

相关推荐

0 条评论