How newCachedThreadPool reuses threads?
executorservice, java, multithreading
Solution
An Runnable can call another Runnable.
Each thread runs only one main Runnable, but that Runnable takes Runnables from a shared BlockingQueue and calls these until it is shutdown.
Simplified it does.
final BlockingQueue<Runnable> queue = ...
Runnable runs = new Runnable() { public void run() {
while(running)
queue.take().run();
}};
You can read the code to see how it really does it.
Problem
The javadoc says that the service returned by `Executors.newCachedThreadPool` reuses threads. How is this possible? A thread can only be started once by calling `start`. So how do they implement it? Threads of this service are running in an infinite loop and their `Runnable`-s are replaced on demand?