Java线程加入示例

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