Java中指令重排
Posted ccbtony
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中指令重排相关的知识,希望对你有一定的参考价值。
/**
* 指令重排:代码执行顺序与预期不一致 (发生在前后行代码无联系时)
* 目的:提高性能
*
*/
public class HappenBefore
private static int a=0;
private static boolean flag=false;
public static void main(String[] args) throws InterruptedException
for(int i=0;i<10;i++)
a=0;
flag=false;
//线程一:更改数据
Thread t1=new Thread(()->
a=1;
flag=true;
);
//线程二:读取数据
Thread t2=new Thread(()->
if(flag)
a*=1;
//指令重排
if(a==0)
System.out.println("happen-before->"+a);
);
t1.start();
t2.start();
t1.join();
t2.join();
以上是关于Java中指令重排的主要内容,如果未能解决你的问题,请参考以下文章
Java 并发编程线程指令重排序问题 ( 指令重排序规范 | volatile 关键字禁止指令重排序 )