CodeGym /Cursos /Núcleo de Java /unirse - esperando que el hilo termine

unirse - esperando que el hilo termine

Núcleo de Java
Nivel 6 , Lección 4
Disponible

"¡Hola, amigo! Veo que estás progresando mucho en el aprendizaje de los hilos".

"No fue tan difícil después de todo".

¡Genial! Hoy tiene una lección fácil y el tema es el método de unión .

Imagine la siguiente situación: el subproceso principal ha creado un subproceso secundario para realizar alguna tarea. Pasa el tiempo y ahora el subproceso principal necesita los resultados del trabajo realizado por el subproceso secundario. Pero el subproceso secundario aún no ha terminado su trabajo. ¿Qué debe hacer el hilo principal?

Buena pregunta. ¿Qué debe hacer el hilo principal?

"Para esto es el método join . Nos permite hacer que un hilo espere mientras otro hilo termina su trabajo:"

Código Descripción
class Printer implements Runnable
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("I’m " + this.name);
}
}
Clase que implementa la interfaz Runnable.
public static void main(String[] args)
{
Printer printer1 = new Printer("Nick");
Thread thread1 = new Thread(printer1);
thread1.start();

thread1.join();
}
El subproceso principal crea un subproceso secundario: subproceso1 .

Luego lo inicia llamando a thread1 .start();

Y luego espera a que se complete – thread1.join();

Un subproceso puede llamar al método de unión en el objeto Subproceso de un segundo subproceso. Como resultado, el primer subproceso (que llamó al método) detiene su trabajo hasta que finaliza el segundo subproceso (cuyo método de unión del objeto fue llamado).

Necesitamos distinguir entre dos cosas aquí: tenemos un subproceso (un entorno de ejecución separado) y tenemos un objeto Subproceso.

"¿Eso es todo?"

"Sí."

"Pero, ¿por qué tenemos que crear un hilo y luego esperar inmediatamente a que se complete?"

"Es posible que no necesite hacerlo de inmediato. Podría ser después de que haya pasado un tiempo. Después de iniciar su primer subproceso secundario, el subproceso principal puede asignar muchas más tareas a otros subprocesos (creándolos y llamando al método de inicio ). Luego, cuando no le queda trabajo, necesita procesar los resultados del primer subproceso secundario. Cada vez que necesite esperar a que otro subproceso termine de funcionar, debe llamar al método de unión ".

"Entiendo."

Comentarios (3)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Antonio Lopez Nivel 81 Expert
4 diciembre 2023
En el ejercicio: organizar llamadas a los metodos join() (Para aclarar por si no entiendes inglés.) Se trata de seguir ese orden de ejecución que nos mencionan. Debemos desplegar(tener un output) esto: Las gatas dan a luz gatitos. Todos los gatitos salen de la cesta en orden aleatorio. (los threads son aleatorios ya por diseño) Entonces todos los gatitos de ambas gatas salen de la cesta en orden aleatorio. Y luego los ponen de nuevo a todos en la cesta. Lo que en inglés seria igual a: Chloe gave birth to 2 kittens. Kitten 1, whose mother is Chloe, climbed out of the basket. Princess gave birth to 2 kittens. - Kitten 2, whose mother is Chloe, climbed out of the basket. Kitten 1, whose mother is Princess, climbed out of the basket. Kitten 2, whose mother is Princess, climbed out of the basket. Chloe: All the kittens are in the basket. Chloe gathered them up and put them back. Princess: All the kittens are in the basket. Princess gathered them up and put them back. Y eso se logra haciendo que los hilos se controlen según necesitemos con los métodos threads que hemos aprendido. Pero aquí el inglés y español hacen un poco confuso por eso coloco este mensaje aclaratorio.
Antonio Lopez Nivel 81 Expert
2 diciembre 2023

En el ejercicio:
Unirse: en el momento correcto en el lugar correcto

En esta linea de codigo:
result.add(String.format("String %d", (i + 1)));

String %d    --->    Alguien podria tener la duda de donde sale esto

%d    como lo vimos en niveles anteriores es un especificador de formato.

%d           ---->    entero

String %d
Sirve para decir que el argumento que esta antes debe ser usado como un entero
Luego format() lo agrega al string.
Antonio Lopez Nivel 81 Expert
26 noviembre 2023
En el ejercicio "Avance de los debates politicos": Cada politico es un thread(hilo) y detenemos al hilo main hasta que todos los discursos unidos de los políticos alcancen el recuento totalSpeechCount y deberiamos imprimir la leyenda de que Lincoln (Ivanov) tiene el mayor numero de discursos pronunciados. Output: Lincoln spoke 200 times Jefferson spoke 200 times Hamilton spoke 177 times Lincoln gave the most speeches in the political debates.