Java 对象销毁前资源清理
Java resource clean up before object destruction
我有以下问题,我知道已经有很多问题了,但是 none 这些问题给了我一个真正令人满意的答案!我用 C++ 写了很多东西,这种语言提供了一个析构函数,Java 不是因为垃圾收集。
简单介绍一下我的情况:我写了一个访问本地 Sqlite3 数据库的软件。我写了一个中央单例 class 来访问这个数据库。多个其他 classes 通过此包装器 class 访问数据库。这是这个包装器的伪代码 class:
public class MyDbWrapper
{
private currentDbConnection;
public MyDbWrapper(dbPath)
{
// Open the database connection with given path
}
public readFromDb()
{
... // Uses the class member currentDbConnection
}
public writeToDb()
{
... // Uses the class member currentDbConnection
}
public closeDb()
{
...
}
}
现在我的问题是,如何确保在退出应用程序之前关闭数据库连接?是的,我已经实现了 AutoCloseable
接口,是的,我已经使用 try-with-resources
进行了很多工作,但是由于多个 classes 的访问,这不是一个真正的选择!
在 C++ 中,析构函数可以解决这个问题,但是 java 中可能的 "equivalent" 方法 finalize
是 deprecated!
还有其他选择吗?或者我应该完全重新设计我的完整包装器吗?如果是,如果我每次都重新打开数据库,我该如何防止因为大量读写访问而导致的性能问题?
我有以下问题,我知道已经有很多问题了,但是 none 这些问题给了我一个真正令人满意的答案!我用 C++ 写了很多东西,这种语言提供了一个析构函数,Java 不是因为垃圾收集。
简单介绍一下我的情况:我写了一个访问本地 Sqlite3 数据库的软件。我写了一个中央单例 class 来访问这个数据库。多个其他 classes 通过此包装器 class 访问数据库。这是这个包装器的伪代码 class:
public class MyDbWrapper
{
private currentDbConnection;
public MyDbWrapper(dbPath)
{
// Open the database connection with given path
}
public readFromDb()
{
... // Uses the class member currentDbConnection
}
public writeToDb()
{
... // Uses the class member currentDbConnection
}
public closeDb()
{
...
}
}
现在我的问题是,如何确保在退出应用程序之前关闭数据库连接?是的,我已经实现了 AutoCloseable
接口,是的,我已经使用 try-with-resources
进行了很多工作,但是由于多个 classes 的访问,这不是一个真正的选择!
在 C++ 中,析构函数可以解决这个问题,但是 java 中可能的 "equivalent" 方法 finalize
是 deprecated!
还有其他选择吗?或者我应该完全重新设计我的完整包装器吗?如果是,如果我每次都重新打开数据库,我该如何防止因为大量读写访问而导致的性能问题?