Java线程 join 方法可用于暂停当前线程的执行,直到指定的线程结束。该方法有三个重载版本。
Java线程 join
public final void join():此Java线程 join 方法将当前线程置于等待状态,直到调用它的线程结束。如果线程被中断,它会抛出 InterruptedException。public final synchronized void join(long millis):此Java线程 join 方法用于等待调用它的线程结束,或等待指定的毫秒数。由于线程执行取决于操作系统的实现,它不能保证当前线程仅等待给定的时间。public final synchronized void join(long millis, int nanos):此Java线程 join 方法用于等待线程死亡,时间为给定的毫秒数加上纳秒数。以下是一个简单的示例,展示了 Thread join 方法的用法。程序的目标是确保主线程是最后一个完成的线程,并且第三个线程只在第一个线程死亡时启动。
package com.journaldev.threads;
public class ThreadJoinExample {
public static void main(String[] args) {
Thread t1 = new Thread(new MyRunnable(), "t1");
Thread t2 = new Thread(new MyRunnable(), "t2");
Thread t3 = new Thread(new MyRunnable(), "t3");
t1.start();
//在等待2秒或线程结束后启动第二个线程
try {
t1.join(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
t2.start();
//只有在第一个线程结束后启动第三个线程
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
t3.start();
//在主线程结束之前等待所有线程执行完成
try {
t1.join();
t2.join();
t3.join();
} catch (InterruptedException e) {
// TODO 捕获异常块
e.printStackTrace();
}
System.out.println("All threads are dead, exiting main thread");
}
}
class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("Thread started:::"+Thread.currentThread().getName());
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread ended:::"+Thread.currentThread().getName());
}
}
上述程序的输出是:
Thread started:::t1
Thread started:::t2
Thread ended:::t1
Thread started:::t3
Thread ended:::t2
Thread ended:::t3
All threads are dead, exiting main thread
这就是关于Java线程join示例的快速总结。
Source:
https://www.digitalocean.com/community/tutorials/java-thread-join-example