在多线程中有多种方法让线程按特定顺序执行,可以用线程类的join()方法在一个线程中启动另一个线程,另外一个线程完成该线程继续执行。比如说:使用join方法,T3调用T2,T2调用T1,这样就能确保T1就会先完成而T3最后完成。
定义三个类,分别实现Runnable
接口,每个类将表示一个线程。这三个类需要重写run()
方法,并在其中添加逻辑。
T1类 (ThreadT1)
public class ThreadT1 implements Runnable {
@Override
public void run() {
System.out.println("T1开始执行");
try {
// 等待T2完成
ThreadT2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("T1完成执行");
}
}
T2类 (ThreadT2)
public class ThreadT2 implements Runnable {
@Override
public void run() {
System.out.println("T2开始执行");
try {
// 等待T3完成
ThreadT3.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("T2完成执行");
}
}
T2类 (ThreadT2)
public class ThreadT3 implements Runnable {
@Override
public void run() {
System.out.println("T3开始执行");
System.out.println("T3完成执行");
}
}
主程序中按照所需顺序启动
public class Main {
public static void main(String[] args) {
Thread threadT1 = new Thread(new ThreadT1());
Thread threadT2 = new Thread(new ThreadT2());
Thread threadT3 = new Thread(new ThreadT3());
// 按照顺序启动线程
threadT1.start();
try {
threadT1.join(); // 等待T1完成
} catch (InterruptedException e) {
e.printStackTrace();
}
threadT2.start();
try {
threadT2.join(); // 等待T2完成
} catch (InterruptedException e) {
e.printStackTrace();
}
threadT3.start();
}
}
工作原理如下:
main
方法中首先创建了三个线程对象。- 它们被依次启动:
threadT1.start()
,然后等待threadT1
完成,通过调用threadT1.join()
来实现。 - 在
threadT1
完成后,启动threadT2
,并等待它完成。 - 最后,启动
threadT3
,由于之前两个线程已经完成,它可以直接运行。