意义:
为什么要等待线程?
因为多个线程是并发执行的,具体的执行过程由操作系统调度,而操作系统调度线程的过程是“随机”的,所以我们无法确定线程执行的顺序,所以如果我们想要线程按规定的顺序执行完毕就需要用到线程等待的概念
代码:
package 等待线程;
/**
* Created with IntelliJ IDEA.
* Description:
* User: wuyulin
* Date: 2023-07-25
* Time: 13:51
*/
//通过join()方法让一个线程等待另一个线程
public class Demo1 {
public static void main(String[] args) {
Thread B=new Thread(()->{
for(int i=0;i<5;i++){
System.out.println("hello B");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
System.out.println("B线程结束");
});
Thread A=new Thread(()->{
for(int i=0;i<3;i++){
System.out.println("hello A");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
//到达此处时要是B线程还没有结束,A线程就会进入阻塞状态,等待B线程结束后才会将A线程恢复,继续执行下面的代码
try {
B.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("A线程结束");
});
A.start();
B.start();
}
}
主要内容:
通过join()方法让一个线程等待另一个线程
细节分析:
由于该程序的目的是让线程B先执行完毕,线程A后执行完毕,所以要在线程A中加上 B.join()代码,当线程A中的程序执行到该代码时,要是B线程还没有结束,A线程就会进入阻塞状态,等待B线程结束后才会将A线程恢复,继续执行下面的代码,而要是此时B线程已经结束了,那A线程不会进入阻塞状态,直接执行后面的代码