¿Qué hace la función start() en subprocesos múltiples en Java?

Hemos discutido que los subprocesos de Java generalmente se crean utilizando uno de los dos métodos: (1) Ampliación de la clase de subprocesos. (2) Implementación de Runnable
En ambos enfoques, anulamos la función run(), pero comenzamos un subproceso llamando a la función start(). Entonces, ¿por qué no llamamos directamente a la función run() anulada? ¿Por qué siempre se llama a la función de inicio para ejecutar un hilo?
¿Qué sucede cuando se llama a una función?  
Cuando se llama a una función, se realizan las siguientes operaciones: 
 

  1. Los argumentos son evaluados.
  2. Se inserta un nuevo marco de pila en la pila de llamadas.
  3. Los parámetros se inicializan.
  4. Se ejecuta el cuerpo del método.
  5. Se devuelve el valor y el marco de la pila actual se extrae de la pila de llamadas.

El propósito de start() es crear una pila de llamadas separada para el hilo. Se crea una pila de llamadas por separado y, a continuación, JVM llama a run().
Veamos qué sucede si no llamamos a start() y en su lugar llamamos a run() directamente. Hemos modificado el primer programa discutido aquí
 

Java

// Java code to see that all threads are
// pushed on same stack if we use run()
// instead of start().
class ThreadTest extends Thread
{
  public void run()
  {
    try
    {
      // Displaying the thread that is running
      System.out.println ("Thread " +
                Thread.currentThread().getId() +
                " is running");
 
    }
    catch (Exception e)
    {
      // Throwing an exception
      System.out.println ("Exception is caught");
    }
  }
}
 
// Main Class
public class Main
{
  public static void main(String[] args)
  {
    int n = 8;
    for (int i=0; i<n; i++)
    {
      ThreadTest object = new ThreadTest();
 
      // start() is replaced with run() for
      // seeing the purpose of start
      object.run();
    }
  }
}

Producción: 
 

Thread 1 is running
Thread 1 is running
Thread 1 is running
Thread 1 is running
Thread 1 is running
Thread 1 is running
Thread 1 is running
Thread 1 is running

Podemos ver en el resultado anterior que obtenemos los mismos identificadores para todos los subprocesos porque hemos llamado directamente a run(). El programa que llama a start() imprime diferentes ID (ver esto )
Referencias: 
 

Este artículo es una contribución de kp93 . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@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 *