我创建了一个这样的线程:
private Thread t = new Thread() {
@Override
public void run() {
try {
while(true) {
// do work
Thread.sleep(1000);
}
} catch (InterruptedException ex) {
}
}
};
t.start();
然后我用t.interrupt()
打断了它。
一旦线程停止并进入睡眠状态()它就会中断并变得无法使用,但是它会保留在内存中吗?
我是否必须致电t = null
,否则GC会处理此事?
我正在尝试动态中断线程并在需要时重新创建它(使用t = new Thread()
),但我不确定是否只是interrupt()从内存中删除旧线程。我搜索过但找不到这个明确的答案。
答案 0 :(得分:1)
Thread类是OS Thread的代理。在调用start()之前,没有实际的OS线程,并且在线程停止之后,即使您坚持使用Thread对象,它也会被清除。此时它就像任何其他物体一样,它将以正常方式清理。
答案 1 :(得分:0)
似乎你在一个方法中使用了这个代码片段,因此Thread t成为局部变量,它将被gc清除,只是确保你不要在方法中进一步使用这个引用变量。