newCachedThreadPool如何重用线程



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

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

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

简化了它。

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

您可以阅读代码来了解它是如何做到这一点的。

相关内容

  • 没有找到相关文章

最新更新