2012-08-22 22 views
5

javadoc說Executors.newCachedThreadPool返回的服務會重用線程。這怎麼可能? 線程只能通過調用start啓動一次。那麼他們如何實現它?此服務的線程正在無限循環中運行,並且它們的Runnable -s按需更換?newCachedThreadPool如何重用線程?

回答

4

一個Runnable可以調用另一個Runnable。

每個線程只運行一個主Runnable,但該Runnable從共享的BlockingQueue中獲取Runnable並調用這些直到它關閉。

簡化它。

final BlockingQueue<Runnable> queue = ... 

Runnable runs = new Runnable() { public void run() { 
    while(running) 
     queue.take().run(); 
}}; 

你可以閱讀代碼,看看它是如何做到的。

+1

我本來可以猜到......簽名還暗示了這種功能。 – zeller