猿问

在销毁对象之前清理Java资源

我有以下问题,我知道已经有很多问题,但是这些问题都没有给我一个令人满意的答案!我用C ++写了很多东西,这种语言提供了一个析构函数,而Java并不是因为垃圾回收。


针对我的情况进行了一些介绍:我编写了一个访问本地Sqlite3数据库的软件。我编写了一个用于访问此数据库的中央单例类。其他多个类通过此包装器类访问数据库。这是此包装器类的伪代码:


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,但是由于有多个类的访问,所以这实际上不是一个选择!在C ++中的析构函数将解决这个问题,但该方法在Java中可能的“等价物”finalize被弃用!


那么,还有其他选择吗?还是应该完全重新设计完整的包装器?如果是,每次重新打开数据库时,如何防止由于大量读写访问而导致的性能问题?


繁星淼淼
浏览 124回答 1
1回答

郎朗坤

就像Joker_vD已经说过的那样,我通过在程序的主要方法中使用try-with-resources语句解决了这个问题。public static void main(String [] args){    try(MyDbWrapper wrapper = new MyDbWrapper())    {        // Execute other task with usage of the database wrapper    }}使用此解决方案,不需要破坏器或不赞成使用不推荐使用的方法finalize(),如果程序结束,数据库连接将关闭。
随时随地看视频慕课网APP

相关分类

Java
我要回答