I was asked this question in an interview today.
"When we create a thread with pthread_create()
(POSIX Threads), the thread starts on its own. Why do we need to explicitly call start()
in Java. What is the reason that Java doesnt start the thread when we create an instance of it."
I was blank and interviewer was short of time and eventually he couldn't explain the reason to me.
The reasons are a lot. But I'll give you a few:
pthread_create
to actually execute the code makes no senseI hope you get the idea.
In Java not starting the thread right away leads to a better API. You can set properties on the thread (daemon, priority) without having to set all the properties in the constructor.
If the thread started right away, it would need a constructor,
To allow setting all these parameters before the thread started. The daemon property can't be set after the thread has started.
I'm guessing that the POSIX API takes a struct with all the thread properties in the call to
pthread_create()
, so it makes sense to start the thread right away.