Thread提供了让一个线程等待另一个线程完成的方法join()方法。当某个程序执行流A中调用其他线程B的join()方法时,调用线程A将被阻塞,直到被join()方法加入的join线程B执行完毕,当前线程A才会重新回到就绪状态。
join():等待被join的线程B执行完毕,A线程才开始执行
join(long millis):等待被join的线程B的时间最长为millis毫秒。如果在millis毫秒内被join()的线程B还没有执行结束,A则不再等待
class JoinThread extends Thread{
public JoinThread(String name){
super(name);
}
@Override
public void run(){
for(int i=0;i<100;i++){
try{
Thread.sleep(200);
}catch(Exception e){
e.printStackTrace();
}
System.out.println(getName()+"->"+i);
}
}
}
public class DaemonThreadTest {
public static void main(String[] args) throws InterruptedException {
JoinThread joinThread = new JoinThread("被Join的线程B");
joinThread.start();
//joinThread.join(); //主线程A调用的(线程B执行join() )
joinThread.join(5000); // 本来是等待B线程执行完,再执行A线程。可如果B线程5s内没有执行完,
//则A线程不再等待,A开始执行,B线程也继续执行。
System.out.println("主线程A执行完毕");//在joinThread线程B执行完毕后,主线程A才会继续执行。
}
}