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 ?

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