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:
- Los argumentos son evaluados.
- Se inserta un nuevo marco de pila en la pila de llamadas.
- Los parámetros se inicializan.
- Se ejecuta el cuerpo del método.
- 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:
- http://www.javatpoint.com/what-if-we-call-run()-method-directly
- http://www.leepoint.net/JavaBasics/methods/methods-25-calls.html
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