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();
}};
您可以阅读代码来了解它是如何做到这一点的。