Jvm(5),指令的重排序问题(未完)

认识指令重排序,

 

1,如上面的例子,假如线程A里面的有两行代码flag=true,a=1,现在重排序成这种规则了,

现在假如线程B来读取数据了,这个时候由于flag=true先执行了,a=1还没有执行,这个时候就会出现,虽然读取的时候flag位true但是现在a=1.这个就是指令的重排序现象。

 

 

如何避免线程的重排序呢。

加锁,现在即使线程重排序了,但是现在因为有锁的存在,这个时候是不会有任何问题的。

 

 

 

什么时候是不可以重排序的

如以上的例子,假如两行语句之间有串行的关系就是不可以重排序的

比如上面的例子,说的直白一一点就是有逻辑关系的两行代码是不可重排序的。

 

指令重排序的原则

这个后续再补充上去。

猜你喜欢

转载自www.cnblogs.com/qingruihappy/p/9691094.html