2013-05-26 2 views
6

run()メソッドが完了した後でも、スレッドは実行後に自己削除してガベージコレクトを取得するか、またはメモリを消費し続けますか?例えばrun()メソッドがJavaで終了すると、スレッドは自動的にガベージコレクトされますか?

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

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

が、私はこのスレッドがメモリから自動的に削除されます、またはそれを明示的に実行する必要がないかどうかを明確にしたいです。

+1

注意。他のJavaオブジェクトと同じように、両方が使用された後にガベージコレクションされます。 –

+0

@owlstead:あなたはAsyncTaskを意味しますか? – Rick77

+0

可能性があります複製可能性:http://stackoverflow.com/questions/2423284/java-thread-garbage-collected-or-not – awsome

答えて

8

これは自動的に発生します。つまり、スレッドがrunメソッドで完了すると自動的にメモリが解放されます。

1

スレッドはrunメソッドが終了するまで存在し、その後はガベージコレクションの対象となります。

メモリが重視されるソリューションが必要な場合は、ExecutorServiceと考えてください。これによりスレッドが処理され、スレッドとメモリを処理するのではなく、ロジックに集中することができます。

0

runメソッドの完了時にスレッドが自動的にガベージコレクションされるため、明示的に行う必要はありません。

0

スレッドは、実行メソッドが完了した後でガベージコレクションされます。これに対する顕著な例外は、あなたがアンドロイドデバッガを使用している場合です。アンドロイドデバッガは、実行を終了したスレッドを含む、認識しているオブジェクトのガベージコレクションを防止します。あなたが直接スレッドを使用するのではなく、 `Task`sを使用することが推奨され

Why do threads leak on Android?

関連する問題