关闭资源的最佳做法是什么?

时间:2016-05-30 19:16:36

标签: java resources autocloseable

我有一个java类,它已经分配了必须关闭的资源。我真的不知道如何强制执行此操作,我当前的方法是实现接口AutoCloseable,希望调用者有时会调用close()并添加boolean已关闭,并在每个方法的开头,如果true,则方法抛出IllegalStateException

调用者必须调用close()并且我必须在每个方法的开头检查已关闭并不是很好,是否有一些最佳做法可以避免这种情况?

1 个答案:

答案 0 :(得分:2)

在您的情况下,使您的类实现接口AutoCloseable是一种很好的方法,因为它允许在try-with-resource语句中使用它。

如果出于某种原因,您希望限制对象实例未正确关闭以避免泄漏的风险,您可以覆盖下一个finalize方法:

@Override
protected void finalize() throws Throwable {
    try {
        this.close();
    } finally {
        super.finalize();
    }
}

警告1:实施finalize方法必须非常谨慎,因为它会降低GC的工作速度,因此您需要确保代码快速执行。

警告2 finalize方法无需调用,因此不要依赖close您的对象,这只会降低风险,您对象的用户仍然有责任close正确使用它。