In Java 5, executors framework was introduced having the concept of thread pools. We can create fixed size thread pool or cached thread pool etc. Suppose we create a thread pool of 10 threads and all threads are doing their tasks. The thread is started by calling the start method and once we call start method, so again start method can't be called on thread. But in thread pool, the threads go back to the pool after finishing their job and will pick up another task to work upon. So, how does it would be able to call start method again?
With a thread pool ExecutorService you don't call start on threads; in fact you don't ever touch the threads at all. The executor handles that. You just submit runnable or callable tasks to the ExecutorService and leave it to handle the task. To run the task again, you would have to submit it to the Executor again.
The executor service won't be calling thread methods internally. I am new to these concepts so may be i am wrong. But I believe the underlying APIs such as thread.start etc. will be called or my understanding is not correct?
An Executor is an object designed to abstract executing a task from the actual mechanics of thread creation, invocation, etc. All you have to do is set up the appropriate Executor, and submit tasks. It will then give it to a thread (or threads) to run. You don't need to know the mechanics of what it actually does under the covers.