El método join() en Java con el ejemplo

El método join() se utiliza para mantener la ejecución del hilo que se está ejecutando actualmente hasta que el hilo especificado esté muerto(ejecución terminada). En este tutorial veremos el propósito y el uso del método join() con ejemplos.

¿Por qué usamos el método join()?

En circunstancias normales, generalmente tenemos más de un hilo, el programador de hilos programa los hilos, lo que no garantiza el orden de ejecución de los mismos.
Por ejemplo, echemos un vistazo al siguiente código:

Sin usar join()

Aquí tenemos tres hilos: th1, th2 y th3. Aunque hemos comenzado los hilos de forma secuencial, el programador de hilos no los inicia y los termina en el orden especificado. Cada vez que se ejecuta este código, se puede obtener un resultado diferente cada vez. Así que la pregunta es: ¿Cómo podemos asegurarnos de que los hilos se ejecuten en un orden determinado. La respuesta es: Usando el método join() apropiadamente.

public class JoinExample2 { public static void main(String[] args) { Thread th1 = nuevo Thread(nuevo MyClass2(), "th1"); Thread th2 = nuevo Thread(nuevo MyClass2(), "th2"); Thread th3 = nuevo Thread(nuevo MyClass2(), "th3"); th1.start(); th2.start(); th3.start(); }} clase MyClass2 implementa Runnable{ @Override public void run() { Hilo t = Hilo.currentThread(); System.out.println("Hilo iniciado: "+t.getName()); try { Thread.sleep(4000); } catch (InterruptedException ie) { ie.printStackTrace(); } System.out.println("Hilo terminado: "+t.getName()); }}

Salida:

Hilo iniciado: th1Hilo iniciado: th3Hilo iniciado: th2Hilo terminado: th1Hilo terminado: th3Hilo terminado: th2

Echemos un vistazo a otro código en el que estamos usando el método join().

El mismo ejemplo con join()

Digamos que nuestro requerimiento es ejecutarlos en el orden de primero, segundo y tercero. Podemos hacerlo usando el método join() apropiadamente.

public class JoinExample { public static void main(String[] args) { Thread th1 = nuevo Thread(nuevo MyClass(), "th1"); Thread th2 = nuevo Thread(nuevo MyClass(), "th2"); Thread th3 = nuevo Thread(nuevo MyClass(), "th3"); // Iniciar el primer hilo inmediatamente th1.start(); // Iniciar el segundo hilo(th2) una vez que el primer hilo(th1) * está muerto */ probar { th1.join(); } atrapar (InterruptedException ie) { ie.printStackTrace(); } th2.start(); /* Iniciar tercer hilo(th3) una vez que el segundo hilo(th2) * está muerto */ intentar { th2.join(); } atrapar (InterruptedException ie) { ie.printStackTrace(); } th3.start(); // Mostrando un mensaje una vez que el tercer hilo está muerto intente { th3.join(); } catch (InterruptedException ie) { ie.printStackTrace(); } System.out.println("Los tres hilos han terminado su ejecución"); }} clase MyClass implementa Runnable{ @Override public void run() { Thread t = Thread.currentThread(); System.out.println("Hilo iniciado: "+t.getName()); try { Thread.sleep(4000); } catch (InterruptedException ie) { ie.printStackTrace(); } System.out.println("Hilo terminado: "+t.getName()); }}

Salida:

Hilo iniciado: th1Hilo terminado: th1Hilo iniciado: th2Hilo terminado: th2Hilo iniciado: th3Hilo terminado: th3Los tres hilos han terminado su ejecución

En este ejemplo hemos utilizado el método join() de tal manera que nuestros hilos se ejecutan en el orden especificado.

4.7/5 - (3 votos)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio