Jestem zdezorientowany:
Aby używać wątków w programie Java, najprostszym sposobem jest rozszerzenie klasy Thread i implementowanie działającego interfejsu (lub po prostu wdrożenie działającego).
Aby rozpocząć wykonywanie wątku. musimy wywołać metodę Thread(), która z kolei wywołuje metodę run() wątku. I tak zaczyna się wątek.
Metoda start() (chyba że się mylę) musi zostać wywołana dokładnie i tylko raz dla każdego wątku. W rezultacie wystąpienia wątków nie mogą być ponownie użyte, chyba że sama metoda uruchamiania działa w nieskończonej pętli, co ułatwia niestandardową implementację ponownego wątku wątku.
Teraz javadoc link text mówiPonowne użycie wątku Java za pomocą executora
zwraca wykonać będzie ponownie użyć wcześniej skonstruowane wątki jeśli dostępne
ja nie rozumiem, jak to jest realizowane. Dostarczam w metodzie execute metody executora mój niestandardowy wątek np.
W jaki sposób ten niestandardowy wątek, który deleguję do struktury executorów, może być ponownie użyty?
Czy Executor może wywołać metodę start() więcej niż 1 raz, podczas gdy my nie możemy w naszych programach? Czy coś nie rozumiem?
Dziękuję.
@Jon: Przepraszam cię straciłem. Tak więc wewnętrzne wątki frameworka są ponownie wykorzystywane, a nie uruchamiane przeze mnie jako argument do wykonania? Mój wątek, który przekazuję do tej struktury, będzie ponownie tworzony za każdym razem, ale przez to samo wystąpienie wewnętrznego wątku tworzonego przez framework? – Cratylus
@ user384706: Tak. Twój runnable * nie jest * wątkiem - to tylko zadanie do wykonania. Musisz rozróżnić te dwa; są bardzo różne. –
@Jon: Dziękuję bardzo. Jedyne, czego nie jestem pewien, to jaka jest korzyść z używania Executors.newCachedThreadPool(); Ponieważ jeśli moja klasa implementująca działające (dla zadania) jest kosztowna do utworzenia, nie będzie ponownie używana i ten sam wątek struktury będzie nadal używać nowych instancji zadania. Więc co mogę zyskać z tego api? Chyba że koncepcja jest taka, że każda klasa implementująca działające jest minimalna. – Cratylus