System.out.println("线程开始执行之前 --> " + t.isAlive()) ;  // 判断是否启动先执行,而且是确定的。当t.start()启动一个线程后,后面的执行顺序就都不确定了,可以在t.start()后面暂停一秒试试看。

解决方案 »

  1.   

    main是一个线程,Thread t = new Thread(mt,"线程");  线程的创建和启动、占用资源都是需要时间的。而你的main线程已经在运行,所以你看到的是main先运行,其实他们是同步运行的,如果main有耗时操作的话,你看的打印出的顺序就不一定了。
      

  2.   

    如果在// 以下的输出结果不确定
    System.out.println("代码执行之后 --> " + t.isAlive()) ; 之前增加Thread.sleep(1000);看到的就有可能是FALSE了。
      

  3.   

    接着6楼补充,
    // 以下的输出结果不确定
    System.out.println("代码执行之后 --> " + t.isAlive()); // 判断是否启动-----------------------------------------
    你的这个代码不确定,是因为:
    main执行了这句以后,你的t线程还没在执行完(当然isAlive就是true)
    除非你保证,在打印这句之前,t必须执行完毕!(那么可以用join来保证)
      

  4.   

    1.main所在的线程结束,和其它子线程是否结束没有任何关系。
    2.main所在的线程结束,demon线程是否退出也和它没有任何关系,而是看整个jvm进程内是否还有非
    demon线程,如果没有,整个jvm进程退出。换句话说jvm只要发现不再有非demon线程就退出,main线程是否退出没有任何关系。
      

  5.   

    start()方法之后线程是可运行的,但是未必被运行.