내가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;
}
}
이는 IllegalStateException
가 발생하지 않을 것입니다 만 GC finalize()
를 호출합니다 가정, 심지어 여러 스레드의 얼굴에, 보장이 있다면?
finalize()
메서드를 사용하면 개체가 가비지 수집 가능하지 않게되므로이 개체가 가비지 수집되지 않고 다른 메서드가 호출 될 수 있습니다. 하지만이 finalize()
은 그렇게하지 않습니다. foo()
이 finalize()
이후에 호출 될 가능성이 여전히 있습니까? 그리고이 마무리 후에 사용될 수 있도록 상기 Foo
객체를 부활 할 수있다 -
당신은 마무리가 된 후 '물어하셨습니까 GC에 의해 호출 되었습니까? ' 그렇지 않으면 일부 바보가 명시 적으로 호출 할 수 있습니다. – bmargulies
@bmargulies 감사합니다. 실제로 그것이 의미하는 바입니다. – Owen
위험을 줄이려면 Object not public에 처음 정의 된대로이 메서드를 보호해야합니다. –