Uniendo hilos en Java

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.

  1. 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()
    
  2. 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)
    
  3. 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
    
  4. 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

Deja una respuesta

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