此为转载解释:
线程必须要先start,才能join,只有启动了,才能对线程进行操作。
如有一个线程叫A,那么请看以下示例代码A.start(); //启动A线程
A.join(); //邀请A线程先执行,本线程先暂停执行,等待A线程执行完后,主线程再接着往下执行
System.out.println("OK"); //这句话,要等到A线程执行完后,主线程获取到执行权后,才会被执行
具体例子:
package com.test;
/**
* Created with 菜鸟大明
* User: Administrator
* Date: 14-6-14
* Time: 下午10:31
* To change this template use File | Settings | File Templates.
*/
public class ThreadTest extends Thread {
int i;
public ThreadTest(int i) {
this.i = i;
}
public void run(){
for (int j = 0;j < 10;j++) {
System.out.println("test" + i + " " +j);
}
}
public static void main(String[] args) throws InterruptedException {
Thread thread1 = new Thread(new ThreadTest(1));
Thread thread2 = new Thread(new ThreadTest(2));
Thread thread3 = new Thread(new ThreadTest(3));
Thread thread4 = new Thread(new ThreadTest(4));
thread1.start();
//暂停其他线程,执行thread1线程,直到thread1线程全部执行结束。
thread1.join();
thread2.start();
//暂停其他线程,执行thread2线程,直到thread1线程全部执行结束。
thread2.join();
thread3.start();
//暂停其他线程,执行thread3线程,直到thread1线程全部执行结束。
thread3.join();
thread4.start();
//暂停其他线程,执行thread4线程,直到thread1线程全部执行结束。
thread4.join();
}
}
代码段里,我把所有的join都注释掉了,输出的效果是
我把注释都打开join的注释,输出结果如下:
结论,可以利用join排列线程的顺序,达到线程顺序执行的效果。