在代码里,我把a.join()写在上面时能正常输出,就是先把A类的i先全部输出完,然后输出main里面的i
当时我把a.join()方法写在for循环的后面就不行了,就是main输出一点,A类的也输出一点,跟没写join()方法类似
有人能详细解释下吗?public class TestJoin {
public static void main(String args[]) throws Exception {
A a = new A();
a.start();
//a.join();
for(int i=0; i<100; i++) 
System.out.println("main--i" + i);
a.join(); //写在这不行
}
}class A extends Thread {
public void run() {
for(int i=0; i<100; i++) 
System.out.println("i" + i);
}
}

解决方案 »

  1.   

    join():等待该线程终止。 
    解释我写在了code的注释里:
    /**
     * @author bzwm
     *
     */
    public class TestJoin {
    public static void main(String args[]) throws Exception {
    A a = new A();
    a.start();
    //当前线程(即main方法的线程)调用了a.join(),表示当前线程阻塞,等待a线程结束了才能继续向下执行
    a.join();
    for (int i = 0; i < 100; i++)
    System.out.println("main--i" + i);
    //如果在这里加了a.join(),这个时候main方法的线程已经走到了最后,(除了最后的a.join())
    //做个假设,线程a里要输出十万次,而main方法要输出100次,很可能是main的输出100次先结束,
    //main的输出结束后执行a.join(),就是等待线程a里的十万次都输出完,才算整个程序结束,JVM停止。
    a.join(); //写在这不行
    }
    }class A extends Thread {
    public void run() {
    for (int i = 0; i < 100; i++)
    System.out.println("i" + i);
    }
    }