
Ori Popowski
Digamos que tenemos estos dos Runnables:
class R1 implements Runnable {
public void run() { … }
…
}
class R2 implements Runnable {
public void run() { … }
…
}
Entonces cual es la diferencia entre esto:
public static void main() {
R1 r1 = new R1();
R2 r2 = new R2();
r1.run();
r2.run();
}
Y esto:
public static void main() {
R1 r1 = new R1();
R2 r2 = new R2();
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
}

Bhesh Gurung
Primer ejemplo: No hay múltiples hilos. Ambos se ejecutan en un único subproceso (existente). Sin creación de hilos.
R1 r1 = new R1();
R2 r2 = new R2();
r1
y r2
son solo dos objetos diferentes de clases que implementan el Runnable
interfaz y así implementar la run()
método. Cuando usted llama r1.run()
lo está ejecutando en el hilo actual.
Segundo ejemplo: Dos hilos separados.
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1
y t2
son objetos de la clase Thread
. Cuando usted llama t1.start()
comienza un nuevo hilo y llama al run()
método de r1
internamente para ejecutarlo dentro de ese nuevo hilo.
Si solo invocas run()
directamente, se ejecuta en el subproceso de llamada, como cualquier otra llamada de método. Thread.start()
se requiere para crear realmente un nuevo subproceso para que el ejecutable run
El método se ejecuta en paralelo.

usuario207421
la diferencia es que Thread.start()
inicia un hilo que llama al run()
método, mientras Runnable.run()
solo llama al run()
método en el subproceso actual.

Jaimin Patel
La diferencia es que cuando el programa llama start()
método, un nuevo el hilo se crea y el código dentro run()
se ejecuta en el nuevo hilo: while if you call run()
método directamente, no se creará ningún nuevo hilo y código dentro run()
se ejecutará en el subproceso actual directamente.
Otra diferencia entre start()
y run()
en el hilo de Java es que no puedes llamar start()
dos veces. Una vez iniciado, segundo start()
la llamada se lanzará IllegalStateException
en Java mientras puedes llamar run()
método varias veces ya que es solo un método ordinario.

aditya
Realmente Thread.start()
crea un nuevo hilo y tiene su propio escenario de ejecución.
Thread.start()
llama al run()
método de forma asincrónica, lo que cambia el estado del nuevo subproceso a Runnable.
Pero Thread.run()
no crea ningún hilo nuevo. En su lugar, ejecuta el método de ejecución en el subproceso en ejecución actual de forma síncrona.
Si estás usando Thread.run()
entonces no está utilizando las funciones de subprocesamiento múltiple en absoluto.

ravindra babu
invocar run()
se está ejecutando en el subproceso de llamada, como cualquier otra llamada de método. mientras que Thread.start()
crea un hilo nuevo. invocando run()
es un error programático.

imabdullah
Si lo haces run()
en el método principal, el subproceso del método principal invocará el run
método en lugar del hilo que necesita para ejecutar.
los start()
método crea un nuevo hilo y para el cual el run()
hay que hacer el metodo