La clase java.lang.Thread proporciona el método join() que permite que un hilo espere hasta que otro hilo complete su ejecución. Si t es un objeto Thread cuyo hilo se está ejecutando actualmente, entonces t.join() se asegurará de que t termine antes de que el programa ejecute la siguiente instrucción.
Si hay varios subprocesos que llaman a los métodos join(), eso significa que la sobrecarga en join le permite al programador especificar un período de espera. Sin embargo, al igual que con la suspensión, la unión depende del tiempo del sistema operativo, por lo que no debe suponer que la unión esperará exactamente el tiempo que especifique.
Hay tres funciones de combinación sobrecargadas.
- join(): pondrá el hilo actual en espera hasta que el hilo en el que se llama esté muerto. Si el subproceso se interrumpe, arrojará InterruptedException.
Sintaxis:
public final void join()
- join(long millis) : pondrá el subproceso actual en espera hasta que el subproceso en el que se llama esté muerto o espere un tiempo específico (milisegundos).
Sintaxis:public final synchronized void join(long millis)
- join(long millis, int nanos): pondrá el subproceso actual en espera hasta que el subproceso en el que se llama esté muerto o espere un tiempo específico (milisegundos + nanos).
Sintaxis:public final synchronized void join(long millis, int nanos)
// Java program to explain the
// concept of joining a thread.
import
java.io.*;
// Creating thread by creating the
// objects of that class
class
ThreadJoining
extends
Thread
{
@Override
public
void
run()
{
for
(
int
i =
0
; i <
2
; i++)
{
try
{
Thread.sleep(
500
);
System.out.println(
"Current Thread: "
+ Thread.currentThread().getName());
}
catch
(Exception ex)
{
System.out.println(
"Exception has"
+
" been caught"
+ ex);
}
System.out.println(i);
}
}
}
class
GFG
{
public
static
void
main (String[] args)
{
// creating two threads
ThreadJoining t1 =
new
ThreadJoining();
ThreadJoining t2 =
new
ThreadJoining();
ThreadJoining t3 =
new
ThreadJoining();
// thread t1 starts
t1.start();
// starts second thread after when
// first thread t1 has died.
try
{
System.out.println(
"Current Thread: "
+ Thread.currentThread().getName());
t1.join();
}
catch
(Exception ex)
{
System.out.println(
"Exception has "
+
"been caught"
+ ex);
}
// t2 starts
t2.start();
// starts t3 after when thread t2 has died.
try
{
System.out.println(
"Current Thread: "
+ Thread.currentThread().getName());
t2.join();
}
catch
(Exception ex)
{
System.out.println(
"Exception has been"
+
" caught"
+ ex);
}
t3.start();
}
}
producción:
Current Thread: main Current Thread: Thread-0 0 Current Thread: Thread-0 1 Current Thread: main Current Thread: Thread-1 0 Current Thread: Thread-1 1 Current Thread: Thread-2 0 Current Thread: Thread-2 1
En el ejemplo anterior, podemos ver claramente que el segundo subproceso t2 comienza después de que el primer subproceso t1 haya muerto y t3 comenzará su ejecución después de que el segundo subproceso t2 haya muerto.
Este artículo es una contribución de Nitsdheerendra . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA