Comment fonctionne un" finalizer guardian " en java?
Comment fonctionne un " finalizer guardian "[Java efficace , page 30]?
Les avez-vous utilisés? Fait-il de résoudre un problème spécifique ?
12
Author: Vinoth Kumar C M, 2011-07-29
1 answers
, Il résout le problème de la sous-catégorie oublier d'appeler la finalize
méthode de la super-classe. Ce modèle fonctionne en attachant une instance supplémentaire avec substituée finalize
à votre super-classe. De cette façon, si la super-classe sort de la portée, l'instance attachée sortirait également de la portée, ce qui déclencherait l'exécution de son finalize
, qui appellerait à son tour le finalize
de la classe englobante.
Voici un court extrait qui présente le modèle guardian en action:
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");
}
}
18
Author: Sanjay T. Sharma, 2017-09-18 16:54:25