gpt4 book ai didi

java - ResultSet 的 AutoCloseable Iterator 是否应该从终结器调用关闭?

转载 作者:行者123 更新时间:2023-12-02 04:53:38 25 4
gpt4 key购买 nike

我有一个由结果集支持的迭代器。我需要它来进行行级后处理。迭代器实现 AutoCloseable 接口(interface)。连接保持打开状态,直到我们迭代被用户中断的所有行/迭代。如果迭代器的使用者显式调用 close() 方法或者将迭代器的使用包装在 Java7 try block 中,则一切都很好。但是,如果消费者不这样做,我无法保证连接将返回到池中。在 C# 世界中,我们将执行终结器并从终结器中调用 Dispose(bool) 作为后备选项。我们应该在 Java 中做同样的事情吗?

最佳答案

这种清理通常不会在 Java finalize() 方法中完成。未能确保正确处置资源是一个编程错误;尝试在不良编程后进行清理导致不良做法的继续。

更常见的是调试选项,可以帮助承认存在问题的开发人员。通常,由于涉及开销,默认情况下不会启用此功能,但是当打开正确的标志时,会在分配资源时创建堆栈跟踪。如果在没有正确销毁资源的情况下调用finalize(),则会记录堆栈以显示泄漏的位置。

关于 finalize() 有许多警告,通常应该避免使用它。本例中的主要问题之一是无法保证它会被调用,即使被调用,也可能无法及时提供帮助。

关于java - ResultSet 的 AutoCloseable Iterator 是否应该从终结器调用关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28994628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com