Ejemplo de Java Thread Join

El método join de Java Thread se puede utilizar para pausar la ejecución del hilo actual hasta que el hilo especificado esté inactivo. Hay tres funciones de join sobrecargadas.

Java Thread join

public final void join(): Este método join de Java espera al hilo actual hasta que el hilo en el que se llama esté inactivo. Si se interrumpe el hilo, se lanza InterruptedException. public final synchronized void join(long millis): Este método join de Java Thread se utiliza para esperar a que el hilo en el que se llama esté inactivo o esperar durante los milisegundos especificados. Dado que la ejecución del hilo depende de la implementación del sistema operativo, no garantiza que el hilo actual espere solo durante el tiempo especificado. public final synchronized void join(long millis, int nanos): Este método join de Java Thread se utiliza para esperar a que el hilo muera durante los milisegundos dados más los nanosegundos. Aquí hay un ejemplo simple que muestra el uso de los métodos Thread join. El objetivo del programa es asegurarse de que el hilo principal sea el último en finalizar y que el tercer hilo comience solo cuando el primero esté inactivo.

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();
        
        //comienza el segundo hilo después de esperar 2 segundos o si está inactivo
        try {
            t1.join(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        t2.start();
        
        //comienza el tercer hilo solo cuando el primer hilo esté inactivo
        try {
            t1.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        t3.start();
        
        //permitir que todos los hilos terminen la ejecución antes de finalizar el hilo principal
        try {
            t1.join();
            t2.join();
            t3.join();
        } catch (InterruptedException e) {
            // Bloque catch generado automáticamente
            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());
    }
    
}

La salida del programa anterior es:

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

Eso es todo para un breve resumen sobre el ejemplo de unión de hilos en Java.

Source:
https://www.digitalocean.com/community/tutorials/java-thread-join-example