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?
5
A
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.
Mogłem się domyślić ... podpis sugeruje również tę funkcję. – zeller