想要让三个线程依次执行,并且严格按照T1,T2,T3的顺序的话,主要就是想办法让三个线程之间可以通信、或者可以排队。
想让多个线程之间可以通信,可以通过join方法实现,还可以通过CountDownLatch、CyclicBarrier和Semaphore来实现通信。
想要让线程之间排队的话,可以通过线程池或者CompletableFuture的方式来实现。
在代码中,分别依次调用三个线程的start方法,这种方法是最容易想到的,但是也是最不靠谱的。
代码实现如下,通过执行的话可以发现,数据结果是不固定的:
public static void main(String[] args) {
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread 1 running");
}
});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread 2 running");
}
});
Thread thread3 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread 3 running");
}
});
thread1.start();
thread2.start();
thread3.start();
}
以上代码的数据结果每次执行都不固定,所以,没办法满足我们的要求。
Thread类中提供了一个join方法,他的有以下代码:
public static void main(String[] args) throws InterruptedException {
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 1 running");
}
});
thread1.start();
System.out.println("Main 1 running");
}