2012-08-22 13 views
5

Jawadok mówi, że usługa zwrócona przez Executors.newCachedThreadPool ponownie używa wątków. Jak to jest możliwe? Wątek można uruchomić tylko raz, dzwoniąc pod numer start. W jaki sposób go realizują? Wątki tej usługi działają w nieskończonej pętli, a ich Runnable -s są wymieniane na żądanie?Jak newCachedThreadPool ponownie wykorzystuje wątki?

Odpowiedz

4

An Runnable może wywołać inny Runnable.

Każdy wątek ma tylko jeden główny runnable, ale Runnable pobiera Runnables z dzielonego BlockingQueue i wywołuje je, dopóki nie zostanie wyłączony.

Uproszczony to robi.

final BlockingQueue<Runnable> queue = ... 

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

Możesz przeczytać kod, aby zobaczyć, jak to naprawdę działa.

+1

Mogłem się domyślić ... podpis sugeruje również tę funkcję. – zeller