Java:我是否需要保护垃圾收集器中的Thread对象?

时间:2011-03-18 12:16:03

标签: java multithreading object garbage-collection

之后

{
Thread t = new Thread();
t.start();
}

Thread对象是GC的候选对象吗?

3 个答案:

答案 0 :(得分:6)

不,它不符合垃圾收集条件。因为,线程调度程序在调用可运行队列中调度线程(在调用t.start( )之后),所以它不符合GC的条件。

检查线程是否仍在运行的方法之一是调用thread.isAlive()

final boolean isAlive( )

如果调用它的线程仍在运行,则isAlive( )方法返回true。否则返回false。 在您的情况下,您始终可以调用t.isAlive()方法,只是为了检查线程是否存活。

当线程停止或结束其生命周期或尚未安排运行时(如Jon的代码片段),则它符合GC的条件。

答案 1 :(得分:5)

如果它已经启动,则它不符合GC的条件 - 毕竟正在运行的代码可以要求Thread.currentThread()

如果您刚刚创建但未启动它,请执行以下操作:

{
    Thread pointless = new Thread();
}

然后我怀疑它符合GC的条件 - 但是创建一个没有启动它的线程是很不寻常的。 (我想在你开始它之前可能会抛出异常......)

答案 2 :(得分:0)

如果要在完成后保留线程,则只需要保护线程。它在运行时(或线程使用的任何东西)不能进行GC'