Actually, It is not wise to compare Runnable
and Thread
with each other.
This two have a dependency and relationship in multi-threading just like Wheel and Engine
relationship of motor vehicle.
I would say, there is only one way for multi-threading with two steps. Let me make my point.
Runnable:
When implementing interface Runnable
it means you are creating something which is run able
in a different thread. Now creating something which can run inside a thread (runnable inside a thread), doesn't mean to creating a Thread.
So the class MyRunnable
is nothing but a ordinary class with a void run
method.
And it's objects will be some ordinary objects with only a method run
which will execute normally when called. (unless we pass the object in a thread).
Thread:
class Thread
, I would say A very special class with the capability of starting a new Thread which actually enables multi-threading through its start()
method.
Why not wise to compare?
Because we need both of them for multi-threading.
For Multi-threading we need two things:
- Something that can run inside a Thread (Runnable).
- Something That can start a new Thread (Thread).
So technically and theoretically both of them is necessary to start a thread, one will run and one will make it run (Like Wheel and Engine
of motor vehicle).
That's why you can not start a thread with MyRunnable
you need to pass it to a instance of Thread
.
But it is possible to create and run a thread only using class Thread
because Class Thread
implements Runnable
so we all know Thread
also is a Runnable
inside.
Finally Thread
and Runnable
are complement to each other for multithreading not competitor or replacement.