Thread提供了让一个线程等待另一个线程完成的方法——join()方法。当在某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的join线程执行完为止。
join()方法通常由使用线程的程序调用,以将大问题划分成许多小问题,每个小问题分配一个线程。当所有的小问题都得到处理后,再调用主线程来进一步操作
public class JoinThread extends Thread {
// 设置线程的名字
public JoinThread(String name) {
super(name);
}
@Override
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args) throws InterruptedException {
// 启动子线程
new JoinThread("新线程").start();
for (int i = 0; i < 5; i++) {
if (i == 2) {
JoinThread jt = new JoinThread("被 join 的线程");
jt.start();
// main 线程调用了 jt 线程的 join() 方法,因为必须等 jt 执行结束才可向下执行
jt.join();
}
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
}
以上代码一共有3个线程,当名为“被Join的线程”的线程执行时,实际上只有2个子线程并发执行,而主线程处于等待状态