¿Cómo obtener la identificación de un subproceso en ejecución actual en Java?

El método getId() de la clase Thread devuelve el identificador del hilo invocado. El ID del hilo es un número largo positivo generado cuando se creó este hilo. El ID del subproceso es único y permanece sin cambios durante su vigencia. Cuando se termina un subproceso, este ID de subproceso se puede reutilizar.

Java permite la ejecución simultánea de diferentes partes de un programa con la ayuda de hilos. Los subprocesos múltiples en Java se logran extendiendo la clase Thread o implementando la interfaz ejecutable. Dado que la herencia múltiple no está permitida en Java, se recomienda implementar la interfaz Runnable para la creación de subprocesos, de modo que, si es necesario, la clase que implementa la interfaz Runnable pueda extender alguna otra clase. En este artículo, hemos demostrado ambos métodos para crear un hilo. El primer enfoque muestra la creación de subprocesos mediante la extensión de la clase Subproceso y el segundo enfoque muestra la creación de subprocesos mediante la implementación de la interfaz ejecutable.

Declaración

public long getId()

Valor de retorno:

Enfoque 1: Los siguientes son los pasos para crear un hilo extendiendo la clase Thread .

  1. La clase ThreadDemo1 extiende la clase Thread y anula el método run() de la clase Thread.
  2. En el método run(), usamos el método currentThread().getName() para obtener el nombre del subproceso actual que ha invocado el método run().
  3. Usamos el método currentThread().getId() para obtener la identificación del hilo actual que ha invocado el método run().
  4. Dentro del método main(), se crean dos instancias de la clase ThreadDemo1.
  5. t1 y t2 son dos hilos que invocan el método start().
  6. Invocar el método start() básicamente invoca el método run() de forma predeterminada.
  7. El método join() se utiliza para evitar que t2 se ejecute antes de que finalice t1.
  8. Tan pronto como t1 se completa, t2 comienza la ejecución.

Ejemplo:

Java

// Java program to get the id of a 
// thread
  
import java.util.*;
public class ThreadDemo1 extends Thread {
    public void run()
    {
        // gets the name of current thread
        System.out.println(
            "Current Thread Name: "
            + Thread.currentThread().getName());
        
        // gets the ID of the current thread
        System.out.println(
            "Current Thread ID: "
            + Thread.currentThread().getId());
    }
    public static void main(String[] args)
        throws InterruptedException
    {
        Scanner s = new Scanner(System.in);
        
        // creating first thread
        ThreadDemo1 t1 = new ThreadDemo1();
        
        // creating second thread
        ThreadDemo1 t2 = new ThreadDemo1();
        
        // Starting the thread
        t1.start();
        t2.start();
        
        // t2 does not start execution until t1 completes
        // execution
        t1.join();
    }
}
Producción

Current Thread Name: Thread-0
Current Thread Name: Thread-1
Current Thread ID: 11
Current Thread ID: 12

Enfoque 2: en el segundo enfoque, el subproceso se crea implementando la interfaz ejecutable .

  1. La clase ThreadDemo2 implementa la interfaz Runnable y anula el método run().
  2. Se crea una instancia ejecutable de la clase t ThreadDemo2.
  3. Se crean dos instancias de la clase Thread pasando la instancia ejecutable como primer parámetro y el nombre del hilo como segundo parámetro.
  4. El método start() se invoca en ambos subprocesos
  5. El método start() invoca el método run() por defecto

Ejemplo:

Java

// Java program to get the id of a 
// thread
  
public class ThreadDemo2 implements Runnable {
    public void run()
    {
        // gets the name of current thread
        System.out.println(
            "Current Thread Name: "
            + Thread.currentThread().getName());
        
        // gets the ID of the current thread
        System.out.println(
            "Current Thread ID: "
            + Thread.currentThread().getId());
    }
    public static void main(String[] args)
    {
          // Runnable target
        ThreadDemo2 t = new ThreadDemo2();
        
          // create threads
        Thread t1 = new Thread(t, "First Thread");
        Thread t2 = new Thread(t, "Second Thread");
            
          // start threads
        t1.start();
        t2.start();
    }
}
Producción

Current Thread Name: First Thread
Current Thread Name: Second Thread
Current Thread ID: 11
Current Thread ID: 12

Nota: El resultado puede variar para el segundo enfoque, ya que no está sincronizado y los subprocesos se ejecutan simultáneamente. Por lo tanto, el orden en que se imprime el nombre o la identificación del hilo puede variar. Para evitar este problema, usamos el método join() en el primer enfoque. Si se debe mantener el orden de la salida impresa, el usuario puede usar el método join().

Publicación traducida automáticamente

Artículo escrito por Shreyasi_Chakraborty 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 *