以下はEffective Java 2nd addで書かれています: -
たとえば、ファイナライザーに依存して、データベースなどの共有リソースの永続的なロックを解放することは、分散システム全体を停止させる良い方法です。
なぜなら、
到達できなくなった一部のオブジェクトに対してファイナライザーを実行せずにプログラムが終了する可能性は十分にあります。
では、以下のコードを書いてもよろしいでしょうか?
public void doSomething(long abc) {
//Needs to wait on lock to avoid updates
ReentrantLock lock = mainLock;
lock.lock();
try {
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}