public class Test1 { private static boolean running=true; static int i=0; public static void main(String[] args) throws InterruptedException { runTets(); Thread.sleep(100);//增加sleep 主线程休眠,此时running =true 因此线程一直运行 running = false; } public static void runTets(){ Thread t1 = new Thread(new Runnable() { @Override public void run() { while(running){ //outrun();//如果有方法溢出则不进行指令重排 i++; } } }); t1.start(); } public static void outrun(){ System.out.println("99999999999"); } }
结论分析:
* main 函数不变,while循环执行空方法此时为线程一直执行,由于指令重排,jvm 为了更高效的执行,将runing 标识为true * main 函数去掉休眠,while循环执行空方法此时为线程执行完成,此种现象为二八理论,,此种情形大部分先执行main线程 * main 不变,while 执行i++ 此时一直执行,指令重排 * main 不变,调用其它方法,由于指令重排规则函数溢出不进行指令重排,具体有哪些规则可上网查询