Wenn ichKönnen andere Methoden nach finalize() aufgerufen werden?
public class Foo {
private boolean finalized = false;
public void foo() {
if (finalized)
throw new IllegalStateException("finalize() has been called.");
}
@Override public void finalize() {
super.finalize();
finalized = true;
}
}
Ist es garantiert, selbst im Angesicht von mehreren Threads, nur die GC vorausgesetzt wird finalize()
rufen, dass die IllegalStateException
nie geworfen werden?
Ich weiß, dass angesichts einer finalize()
Methode, die bewirkt, dass das Objekt nicht müllsammelbar ist, das Objekt nicht Müll gesammelt und andere Methoden aufgerufen werden können. Aber das finalize()
macht das nicht. Gibt es noch eine Möglichkeit, dass foo()
nach finalize()
aufgerufen wird?
Haben Sie Fragen bedeuten, ‚nach Finalisierung hat wurde von der GC aufgerufen? Sonst könnte ein Idiot dich explizit ansprechen. – bmargulies
@bmargulies Danke, das ist eigentlich was ich meinte. – Owen
Sie sollten diese Methode so schützen, wie ursprünglich in Objekt nicht öffentlich definiert, um das Risiko zu begrenzen –