我的finalizer guardian在程序退出时无法运行。
他在这里:
public class SomeClass implements SomeInterface {
... setup the PrintWriter os somewhere here
/** oh, i guess i wanted to try out finalizer guardians here. */
@SuppressWarnings("unused")
private final Object finalizerGuardian = new Object(){
protected void finalize(){
try {
//actually, i cannot know if it was closed or not.
System.out.println("connection wasn't closed - it needs to be!");
os.flush();
os.close();
} catch (Exception se){
System.out.println("some sort of exception occurred? Weird");
}
}
};
...
}
我做错了什么?我认为终结者守护者保证会跑?或者不是这样吗?在程序终止时,PrintWriter操作系统肯定不会被刷新或关闭。
答案 0 :(得分:1)
finalize()
在垃圾收集期间被调用,您的程序可能在此之前存在。
答案 1 :(得分:0)
Finalizer线程是垃圾收集(GC)的一部分。虽然确实是GC的一部分,但GC运行时并不能保证。 Finalize方法将对象移动到终结器对象队列,其中终结器线程在运行时清除队列中存在的对象。