Qué instrucción obtiene ejecución después de thread.start (). Declaración del subproceso principal o declaración del subproceso secundario.

Los hilos generalmente se ejecutan en paralelo, pero en este caso, la declaración del hilo principal siempre tiene prioridad sobre la del niño. ¿Cuál es la razón o flujo real?

public class Test extends Thread { 
    public static void main(String[] args) { 
        ChildThread ct = new ChildThread(); 
        ct.start();
        System.out.println("main"); 
    } 
} 
class ChildThread extends Thread{ 
    @Override public void run() {       
        System.out.println("Child thread"); 
    } 
}
0
Vishal Singla 11 may. 2019 a las 10:30

3 respuestas

La mejor respuesta

La llamada a Thread :: start significa que el hilo se pone en la cola de los procesadores. Después de esa llamada, el subproceso principal y secundario se ejecuta en paralelo. El subproceso principal ejecuta inmediatamente System.out.println ("main"); El subproceso secundario espera a que se ejecute un procesador libre (bueno, podemos suponer que siempre hay un procesador libre disponible). Luego hace un poco de trabajo del sistema: marque el procesador como ocupado, cambie el estado del hilo como en ejecución, luego pase el control al método run (), y solo entonces System.out.println ("Hilo secundario") ; se ejecutará.

3
Alexei Kaigorodov 11 may. 2019 a las 10:10

Esto se debe a que JVM tarda un tiempo en llamar ct.run() después de llamar a ct.start() ya que hacer que la nueva ejecución Thread sea una operación pesada. El retraso da tiempo suficiente para imprimir "principal".

Sin embargo, si intenta imprimir ambos en bucles, verá que no se le da prioridad a la Thread principal.

2
Paul Lemarchand 11 may. 2019 a las 07:40

No hay una respuesta segura sobre qué declaración se ejecuta después de thread.start (), pero en la mayoría de los casos será el hilo principal, porque cuando inicia el nuevo hilo, su sistema operativo debe inicializar este hilo, mientras que el hilo principal ya está en el volar.

4
Golov Pavel 11 may. 2019 a las 07:48