非常初级,废话不多说,上源码:
public class Test {    public static void main(String[] args) {
        
        MyRun my = new MyRun();
        Thread td = new Thread(my);
        
        td.start();
        System.out.println("this is from main");
    }
}
class MyRun implements Runnable{    @Override
    public void run() {
        System.out.println("this is from myrun");    
    }
    
}=========================================
执行结果:
this is from main
this is from myrun问题是,明明td.start()在先,为什么不先执行,为什么不是下面的结果:
this is from myrun
this is from main拜谢!!!!

解决方案 »

  1.   

    td.start()开启了一个新线程,新线程的运行于当前的线程是独立的,所以你写的代码顺序就不能确保了
      

  2.   

    这就是两个线程main函数本身是一个线程,你new出来了一个线程,至于谁先执行,是没有顺序可言的,如果你在 System.out.println("this is from main");语句之前sleep几秒,就会先打印this is from myrun了。
      

  3.   

    建议楼主写个循环多输出几次信息看看,谁在前是不确定的,这得看CPU的‘心情’。
      

  4.   

    多个线程启动,执行顺序于开启顺序没有直接的关系,执行顺序是JVM虚拟机调控的,会根据cpu的使用情况来调控
      

  5.   

    主线程抛线程出去后准备执行run方法需要花一些时间,主线程抛出线程后直接运行后面的代码,所以主线程先输出