javadoc说明Executors.newCachedThreadPool返回的服务重用了线程。这怎麽可能?一个线程只能通过调用start启动一次。那么他们是如何实现的呢?此服务的线程正在无限循环中运行,它们的Runnable-s是否按需替换?
发布于 2012-08-22 19:34:38
一个Runnable可以调用另一个Runnable。
每个线程只运行一个主Runnable,但是这个Runnable从一个共享的BlockingQueue中获取Runnable并调用它们,直到它关闭。
简化了就行了。
final BlockingQueue<Runnable> queue = ...
Runnable runs = new Runnable() { public void run() {
while(running)
queue.take().run();
}};你可以通过阅读代码来了解它是如何做到的。
https://stackoverflow.com/questions/12071999
复制相似问题