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();
}};
您可以阅读代码以了解它是如何真正做到的。
关于java - newCachedThreadPool 是如何复用线程的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12071999/