“终结者监护人”如何在java中工作?

时间:2011-07-29 12:09:34

标签: java garbage-collection finalizer

“终结者监护人”[Effective Java,第30页]如何运作?

你使用过它们吗?它解决了任何具体问题吗?

1 个答案:

答案 0 :(得分:18)

它解决了子类忘记调用超类的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"); } } 类。

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

{{1}}