为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星淼淼 2021-03-28 12:10:21
我有以下问题,我知道已经有很多问题,但是这些问题都没有给我一个令人满意的答案!我用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被弃用!那么,还有其他选择吗?还是应该完全重新设计完整的包装器?如果是,每次重新打开数据库时,如何防止由于大量读写访问而导致的性能问题?
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

就像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(),如果程序结束,数据库连接将关闭。


查看完整回答
反对 回复 2021-04-21
  • 1 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信