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();
}};
您可以阅读代码以查看其实际效果。