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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With