私はfinalize()の後に他のメソッドを呼び出せますか?
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;
}
}
を持っている場合は、それが唯一のGCはIllegalStateException
がスローされないことを、finalize()
を呼び出しますと仮定して、でも複数のスレッドの顔には、保証されていますか?
私は、finalize()
メソッドでオブジェクトをガベージコレクトできないようにする方法では、オブジェクトがガベージコレクションされず、他のメソッドが呼び出されることがあります。しかし、このfinalize()
はそれをしません。 finalize()
の後にまだfoo()
が呼び出されている可能性はありますか?
あなたは」、依頼するもしかしてGCによって呼び出されましたか?それ以外の場合、馬鹿は明示的にあなたに呼び出すことができます。 – bmargulies
@bmarguliesありがとう、それは実際に私が意味していたものです。 – Owen
リスクを制限するには、このメソッドをObject not publicに最初に定義されたとおりに保護する必要があります –