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 关键字禁止指令重排序 )

Java 指令重排

指令重排序

Java 并发编程指令重排序规范 ( happens-before 先行发生原则 )

Java指令重排序