之后
{
Thread t = new Thread();
t.start();
}
Thread对象是GC的候选对象吗?
答案 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'