Javadoc表示Executors.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();
}};

您可以阅读代码以查看其实际效果。

09-10 14:00
查看更多