public class ThMain {
public static void main(String[] args) {
Th1 ht1 = new Th1("aaaaaaaaaaa");
Thread demo1 = new Thread(ht1);
Th1 ht2 = new Th1("B");
Thread demo2 = new Thread(ht2);
demo1.start();
demo2.start();
System.out.println("END");
}
}public class Th1 implements Runnable  {
private String name; public Th1(String name) {
this.name = name;
} @Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(name + "运行     " + i);
}
}
}public class Th2  implements Runnable {
private String name; public Th2(String name) {
this.name = name;
} @Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(name + "运行     " + i);
}
}
}main函数里为什么System.out.println("END");这句的输出顺序不是在最后,只有ht1 和ht2开启了线程啊,怎么让它一直在最后输出

解决方案 »

  1.   

    在线程后面添加Thread.join方法等待线程结束public class ThMain {
        public static void main(String[] args) throws InterruptedException {
            Th1 ht1 = new Th1("aaaaaaaaaaa");
            Thread demo1 = new Thread(ht1);
            Th1 ht2 = new Th1("B");
            Thread demo2 = new Thread(ht2);
            demo1.start();
            demo2.start();
            demo1.join();
            demo2.join();
            System.out.println("END");
        }
    }
      

  2.   

    demo1.start();//启动线程1
    demo2.start();//启动线程2
    System.out.println("END");
    你在打印END之前启动两个线,但是你不能确定这两个线程一定会在打印END之前执行,所以END不一定会在最后。你可以加一句Thread.sleep(5000);只要sleep的时间够长,那么就会在最后了。
      

  3.   

    也可检测demo1,demo2,都处于不活动状态,说明线程运行完了。
    加一检测,如下:public class ThMain {
        public static void main(String[] args) {
            Th1 ht1 = new Th1("aaaaaaaaaaa");
            Thread demo1 = new Thread(ht1);
            Th1 ht2 = new Th1("B");
            Thread demo2 = new Thread(ht2);
            demo1.start();
            demo2.start();
    //加一检测
    while(demo1.isAlive()||demo2.isAlive())
    {
    }
            System.out.println("END");
        }
    }