Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How newCachedThreadPool reuses threads?

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?

like image 842
zeller Avatar asked Oct 06 '22 20:10

zeller


1 Answers

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.

like image 158
Peter Lawrey Avatar answered Oct 10 '22 14:10

Peter Lawrey