第一,既然把一个对象放到了threadVector中,那么至少threadVector在引用着这个对象,既然这个对象还在被引用,那么GC就不会回收;
第二,这个问题还真被你问着了,线程对象不同于一般对象的一个区别就是:一般情况下垃圾回收器不会回收到thread对象。thread对象由于需要被系统管理和调度,它需要注册,所以某个地方总会有指向这个线程对象的reference。举例来说:public static void f() {
new MyThread().start();
}public static void main(String args[]) {
f();
}
从表面上来看,f函数退出之后,程序中已经没有任何对象引用那个新创建的thread对象了,但是此时GC仍然不会回收到它。
第二,这个问题还真被你问着了,线程对象不同于一般对象的一个区别就是:一般情况下垃圾回收器不会回收到thread对象。thread对象由于需要被系统管理和调度,它需要注册,所以某个地方总会有指向这个线程对象的reference。举例来说:public static void f() {
new MyThread().start();
}public static void main(String args[]) {
f();
}
从表面上来看,f函数退出之后,程序中已经没有任何对象引用那个新创建的thread对象了,但是此时GC仍然不会回收到它。
俺只是说并不是看上去已经没有对象引用线程了,GC就会回收线程。
俺可没说线程函数都return了,GC也不会回收线程。:P
---------
既然把一个对象放到了threadVector中,那么至少threadVector在引用着这个对象,既然这个对象还在被引用,那么GC就不会回收;