Vin*_*C M 13 java garbage-collection finalizer
"终结者监护人"[Effective Java,第30页]如何运作?
你用过它们了吗?它解决了任何具体问题吗?
San*_*rma 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");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2305 次 |
| 最近记录: |