javadoc说Executors.newCachedThreadPool
返回的服务重用了线程。这怎么可能?
只能通过调用start
启动一次线程。那么他们如何实现呢?这个服务的线程是在一个无限循环中运行,它们的Runnable
- s是按需替换的吗?
答案 0 :(得分:4)
Runnable可以调用另一个Runnable。
每个线程只运行一个主Runnable,但Runnable从共享的BlockingQueue中获取Runnables并调用它们直到它被关闭。
简化它。
final BlockingQueue<Runnable> queue = ...
Runnable runs = new Runnable() { public void run() {
while(running)
queue.take().run();
}};
您可以阅读代码以了解它是如何实现的。