Powiedzmy, że odradzam wątek co kilka sekund, używając poniższej metody, a każda nić zajmuje około sekundy. Czy ukończone wątki zostaną usunięte?Czy wątki java zostaną usunięte po zakończeniu
new Thread (new myRunnableClass()).start();
Powiedzmy, że odradzam wątek co kilka sekund, używając poniższej metody, a każda nić zajmuje około sekundy. Czy ukończone wątki zostaną usunięte?Czy wątki java zostaną usunięte po zakończeniu
new Thread (new myRunnableClass()).start();
Natywny wątek na poziomie systemu operacyjnego jest uwalniany, gdy tylko wątek się zakończy (około run()
), ale obiekt wątku będzie się zachowywał, jak każdy inny obiekt, dopóki nie stanie się niedostępny, a moduł do zbierania śmieci będzie działał.
Edit: Może też być interesujące wiedzieć, że Thread
(w
Sun
wdrożenie Oracle, Anywho) ma prywatną metodę zwaną przez VM Po wyjściu gwint, który agresywnie null kilku dziedzinach, w tym jeden krajowy do zestawu Runnable
ustawionego przez konstruktora Thread(Runnable)
. Więc nawet jeśli zachowujesz odniesienie do Thread
, rzeczy, których nie potrzebuje po zakończeniu wykonywania zostaną zwolnione, niezależnie.
Nie nazwałbym tego usuniętym. Gdy wątek zostanie ukończony, przejdzie do stanu martwego, przygotowując się do usunięcia śmieci przez maszynę JVM.
... chyba że jakaś inna "żywa" struktura danych zachowuje odniesienie do obiektu wątku. Na przykładzie przedstawionym w PO, który nie byłby problemem. – Pointy
... ale jest to wzorzec, który nie występuje, gdy chcesz "dołączyć()" wątki, na przykład, aby pobrać niektóre wyniki z 'Runnable', ale znowu, nie możesz tego zrobić w twoim przykładzie, ponieważ' Odnośnik Runnable' został utracony. – jbindel
Tarło nowego wątku to dość kosztowny proces. To, czego chcesz, to pula wątków. Można to zmienić na różne sposoby - here's one.
Wątki do tarła * były * drogie w systemach * nix (* mianowicie Linux *) dawno temu, ale w jądrze 2.4 (* czy było to 2.6? *) Zmienili system wątków, tak że tworzenie nowych wątków jest teraz praktycznie bezpłatne. Zwróć uwagę, że w środowiskach Windows tarowanie wątków zawsze było dość tanie. To powiedziawszy, używanie puli wątków jest mądrą rzeczą, ponieważ w naturalny sposób zawsze jest trochę narzutów i rzadko trzeba naprawdę mieć miliard uruchomionych wątków, gdy zrobi to kilkanaście. – Esko
Jeśli proces jest tak prosty jak Twój przykład, a każdy wątek jest gwarantowany do zakończenia przed następnym uruchomieniem, czy możesz ponownie użyć jednego wątku? Zgaduję, że twój rzeczywisty program jest bardziej skomplikowany, ale po prostu rzucam sugestię tam. –
@musicfreak: Wiesz, po prostu wychowałeś bardzo przerażający punkt. Z jakiegoś powodu robiłem to w innych miejscach i myślę, że ta sytuacja wyglądała trochę inaczej, ale wymyśliłem sposób na zastosowanie tej techniki do mojego problemu. Dzięki! – Dave