2013-05-26 10 views
6

Czy wątek usuwa się samoczynnie i zbiera śmieci po uruchomieniu, czy nadal istnieje i zużywa pamięć nawet po zakończeniu metody run()?Czy wątki są automatycznie usuwane ze śmieci po uruchomieniu metody run() w języku Java?

Na przykład:

Class A{ 
    public void somemethod() 
    { 
    while(true) 
    new ThreadClass().start(); 
    } 

    public class ThreadClass extends Thread{ 
     public ThreadClass() 
     {} 
     @Override 
     public void run() {......} 
    } 
} 

chcę wyjaśnić, czy ten wątek zostanie automatycznie usuwane z pamięci, czy też muszą być wykonane w sposób jawny.

+1

pamiętać, że są zachęcani do korzystania 'Task's zamiast bezpośrednio za pomocą nici. Oba pobierają śmieci zebrane po ich użyciu, tak jak każdy inny obiekt Java jest naprawdę. –

+0

@owlstead: masz na myśli AsyncTask? – Rick77

+0

Może to być jeden z następujących duplikatów: http://stackoverflow.com/questions/2423284/java-thread-garbage-collected-lub-not- – awsome

Odpowiedz

8

Nastąpi to automatycznie, tj. Pamięć zostanie zwolniona automatycznie po zakończeniu wątku za pomocą metody uruchamiania.

1

Wątki istnieją tylko do końca ich metody uruchamiania, po czym kwalifikują się do usuwania śmieci.

Jeśli potrzebujesz rozwiązania, w którym pamięć jest ważna, możesz rozważyć wydanie ExecutorService. Spowoduje to obsługę wątków i pozwoli skoncentrować się na logice, a nie na obsłudze wątków i pamięci.

0

Wątki są automagicznie usuwane ze śmieci po zakończeniu procesu run, dlatego nie trzeba tego robić w sposób jawny.

0

Wątki będą odpadami zebranymi po zakończeniu ich metody uruchamiania. Godnym uwagi wyjątkiem jest sytuacja, gdy używasz debuggera Android. Debuger systemu Android zapobiega gromadzeniu się śmieci na obiektach, o których wie, co obejmuje wątki, które zakończyły działanie.

Why do threads leak on Android?

Powiązane problemy