假如现在有ABC三个线程,我需要C线程在AB线程执行完成后再执行
直接上代码
public class ThreadTest {
public static void main(String[] args) {
Thread threadA = new Thread(new Task("A"));
Thread threadB = new Thread(new Task("B"));
Thread threadC = new Thread(new Task("C"));
threadA.start();
threadB.start();
try {
// 等待线程A执行完成
threadA.join();
// 等待线程B执行完成
threadB.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
threadC.start();
}
static class Task implements Runnable {
private String name;
public Task(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println("Thread " + name + " started.");
// 模拟任务执行
try {
for (int i = 0; i < 10; i++) {
System.out.println("Thread " + name + " is running.");
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread " + name + " completed.");
}
}
}
看一下执行结果
join() 方法是 Thread 类的一个方法,它的作用是等待调用它的线程执行完毕。具体来说,调用 join()方法的线程会阻塞,直到被调用的线程执行完成才会继续执行。
join() 方法有多个重载形式,其中最常用的两种形式是:
join():等待调用 join() 方法的线程执行完毕。 join(long millis) 或 join(long millis, int nanos):等待调用 join() 方法的线程执行完毕,但最多等待指定的时间,如果超过指定时间仍未完成,则当前线程会继续执行。
在这个示例中,线程 A 和线程 B 是同时启动的,但是由于主线程在调用了 threadA.join() 和 threadB.join() 方法之后会等待线程 A 和线程 B 执行完成,因此主线程会等待线程 A 和线程 B 执行完成后才会继续执行后面的代码(即启动线程 C)。