Java 终结器未完成';跑不动

Java 终结器未完成';跑不动,java,finalizer,Java,Finalizer,我的程序退出时,我的运行失败 他来了: 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 fina

我的程序退出时,我的运行失败

他来了:

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

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

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

此处是否缺少一些信息?我(可能还有Java)只能看到私有类成员,它是一个包含一个方法的自定义对象。为什么要运行?我想他说的是。。。但不管怎样,我发现还有更多的问题,不要依赖终结器-在Java中,try finally块通常用于此目的。程序终止不运行gc?这是我不知道的,jls中没有关于在程序退出之前运行gc的内容。您可以尝试创建一个长时间运行的循环,并等待gc运行。