5

javadoc 说由Executors.newCachedThreadPool重用线程返回的服务。这怎么可能?一个线程只能通过调用启动一次start。那么他们是如何实现的呢?该服务的线程在无限循环中运行并且它们的Runnable-s 按需替换?

4

1 回答 1

4

一个 Runnable 可以调用另一个 Runnable。

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

简化它。

final BlockingQueue<Runnable> queue = ...

Runnable runs = new Runnable() { public void run() {
    while(running)
        queue.take().run();
}};

您可以阅读代码以了解它是如何实现的。

于 2012-08-22T11:34:38.353 回答