Java newCachedThreadPool如何重用线程?

Java newCachedThreadPool如何重用线程?,java,multithreading,executorservice,Java,Multithreading,Executorservice,javadoc说执行者返回的服务。newCachedThreadPool重用线程。这怎么可能? 一个线程只能通过调用start启动一次。那么他们是如何实施的呢?此服务的线程在无限循环中运行,它们的Runnable-s会根据需要被替换?一个Runnable可以调用另一个Runnable 每个线程只运行一个主Runnable,但该Runnable从共享BlockingQueue中获取Runnable并调用它们,直到关闭为止 是的 final BlockingQueue<Runnable>

javadoc说执行者返回的服务。newCachedThreadPool重用线程。这怎么可能?
一个线程只能通过调用
start
启动一次。那么他们是如何实施的呢?此服务的线程在无限循环中运行,它们的
Runnable
-s会根据需要被替换?

一个Runnable可以调用另一个Runnable

每个线程只运行一个主Runnable,但该Runnable从共享BlockingQueue中获取Runnable并调用它们,直到关闭为止

是的

final BlockingQueue<Runnable> queue = ...

Runnable runs = new Runnable() { public void run() {
    while(running)
        queue.take().run();
}};
final BlockingQueue=。。。
Runnable runs=new Runnable(){public void run(){
(跑步时)
queue.take().run();
}};

您可以阅读代码,看看它是如何真正做到这一点的

我可以猜到。。。签名也表明了这一功能。