Czytałam o tym trochę w ciągu ostatnich kilku godzin, a ja po prostu nie widzę żadnego powodu ( ważny powód), aby wywołać shutdown()
na ExecutorService
, chyba że mamy humongous aplikację, która przechowuje, dziesiątki i dziesiątki różnych usług executorów, które nie są wykorzystywane do długo.
Jedyną rzeczą (z tego, co wiem) powoduje zamknięcie, jest zrobienie tego, co robi normalny wątek po zakończeniu. Kiedy normalny wątek zakończy metodę uruchamiania Runnable (lub Callable), zostanie przekazany do Garbage Collection w celu zebrania. Dzięki usłudze Executor wątki zostaną po prostu wstrzymane, nie będą zaznaczane do czyszczenia pamięci. W tym celu konieczne jest wyłączenie.
Ok, wracając do mojego pytania. Czy jest jakiś powód, aby wywoływać wyłączenie ExecutorService
bardzo często, a nawet zaraz po przesłaniu mu niektórych zadań? Chciałbym zostawić przypadek, gdy ktoś to robi i zaraz po tym dzwoni, awaitTermination()
ponieważ jest to sprawdzane. Kiedy już to zrobimy, musimy odtworzyć ExecutorService
wszystko od nowa, aby zrobić to samo. Czy to nie jest cały pomysł na ExecutorService
ponowne wykorzystanie wątków? Po co więc niszczyć ExecutorService
tak szybko?
Czy nie jest to racjonalny sposób, aby po prostu stworzyć ExecutorService
(lub połączyć w pary w zależności od tego, ile potrzebujesz), a następnie podczas działania aplikacji przekazać im zadania, gdy się pojawią, a następnie przy zamknięciu aplikacji lub innych ważnych etapach zamknąć te executory ?
Chciałbym uzyskać odpowiedź od niektórych doświadczonych programistów, którzy piszą dużo kodu asynchronicznego za pomocą ExecutorServices.
Drugie pytanie poboczne, trochę mniejsze oferty dotyczące platformy Android. JEŚLI niektórzy z was powiedzą, że nie jest najlepszym pomysłem zamykanie wykonawców za każdym razem, a programujecie na Androidzie, czy moglibyście mi powiedzieć, jak radzicie sobie z tymi zamknięciami (a konkretnie - kiedy je wykonujemy), gdy mamy do czynienia z różnymi zdarzeniami cykl życia aplikacji.
Ze względu na komentarz CommonsWare post został napisany jako neutralny. Naprawdę nie jestem zainteresowany kłótniami na śmierć i wydaje się, że to tam prowadzi. Interesuje mnie tylko dowiedzenie się, o co pytałem tutaj doświadczonych programistów, jeśli zechcą podzielić się swoimi doświadczeniami. Dzięki.