繁体   English   中英

Java中的“ finalizer监护人”如何工作?

[英]How does a “finalizer guardian” work in java?

“ finalizer监护人” [Effective Java,第30页]如何工作?

你用过吗 它解决了任何特定问题吗?

解决了子类忘记调用超类的finalize方法的问题。 这种模式通过将一个带有重写finalize的额外实例附加到您的超类来工作。 这样,如果超类超出范围,则所附加的实例也将超出范围,这将触发其finalize的执行,而该finalize进而将调用封闭类的finalize

这是一个简短的片段,展示了运行中的守护者模式:

public class Parent {

    public static void main(final String[] args) throws Exception {
        doIt();
        System.gc();
        Thread.sleep(5000); //  5 sec sleep
    }

    @SuppressWarnings("unused")
    private final Object guardian = new Object() {
        @Override protected void finalize() {
            doFinalize();
        }
    };

    private void doFinalize() {
        System.out.println("Finalize of class Parent");
    }

    public static void doIt() {
        Child c = new Child();
        System.out.println(c);
    }

}

class Child extends Parent {

    // Note, Child class does not call super.finalize() but the resources held by the
    // parent class will still get cleaned up, thanks to the guardian pattern
    @Override protected void finalize() {
        System.out.println("Finalize of class Child");
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM