【发布时间】:2012-08-17 19:26:43
【问题描述】:
javadoc 说Executors.newCachedThreadPool 返回的服务重用了线程。这怎么可能?
一个线程只能通过调用start 启动一次。那么他们是如何实现的呢?该服务的线程在无限循环中运行,并且它们的Runnable-s 被按需替换?
【问题讨论】:
标签: java multithreading executorservice
javadoc 说Executors.newCachedThreadPool 返回的服务重用了线程。这怎么可能?
一个线程只能通过调用start 启动一次。那么他们是如何实现的呢?该服务的线程在无限循环中运行,并且它们的Runnable-s 被按需替换?
【问题讨论】:
标签: java multithreading executorservice
一个 Runnable 可以调用另一个 Runnable。
每个线程只运行一个主 Runnable,但该 Runnable 从共享的 BlockingQueue 中获取 Runnables 并调用它们,直到它被关闭。
简化了。
final BlockingQueue<Runnable> queue = ...
Runnable runs = new Runnable() { public void run() {
while(running)
queue.take().run();
}};
您可以阅读代码以了解它是如何实现的。
【讨论】: