终结者守护者没有跑

时间:2014-11-18 10:16:00

标签: java finalizer

我的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操作系统肯定不会被刷新或关闭。

2 个答案:

答案 0 :(得分:1)

finalize()在垃圾收集期间被调用,您的程序可能在此之前存在。

答案 1 :(得分:0)

Finalizer线程是垃圾收集(GC)的一部分。虽然确实是GC的一部分,但GC运行时并不能保证。 Finalize方法将对象移动到终结器对象队列,其中终结器线程在运行时清除队列中存在的对象。