Leif Ericson Leif Ericson - 3 months ago 12
Java Question

What's the difference between Thread start() and Runnable run()

Say we have these two Runnables:

class R1 implements Runnable {
public void run() { … }

}

class R2 implements Runnable {
public void run() { … }

}


Then what's the difference between this:

public static void main() {
R1 r1 = new R1();
R2 r2 = new R2();

r1.run();
r2.run();
}


And this:

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();
}

Answer

First example: No multiple threads. Both execute in single (existing) thread. No thread creation.

R1 r1 = new R1();
R2 r2 = new R2();

r1 and r2 are just two different objects of the class that implements the Runnable interfaces which have that run() method. When you call r1.run() you are executing it in the current thread.

Second example: Two separate threads.

Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);

t1 and t2 are the objects of the class Thread. When you call t1.start(), it starts a new thread and calls the run() method of r1 internally to execute it within that new thread.