Java 打开数据库管理句柄

Java 打开数据库管理句柄,java,Java,我正在使用伯克利数据库 通常,在这种类型的数据库中,您打开一个环境,该环境是一组用于控制锁定和事务等的文件,然后在此环境中打开您的数据库 问题是有很多数据库要打开…… 打开数据库的方法是opendatabase() 但是,打开和关闭数据库总是很慢。。。文件上说 打开数据库是一个相对简单的过程 操作成本高,维护成本低 一组开放数据库通常是 比反复打开和关闭更好 关闭每个新数据库的数据库 询问 问题是如何维护该设置????? 我认为一个简单的解决方案是延迟加载 private static Dat

我正在使用伯克利数据库

通常,在这种类型的数据库中,您打开一个环境,该环境是一组用于控制锁定和事务等的文件,然后在此环境中打开您的数据库

问题是有很多数据库要打开……
打开数据库的方法是
opendatabase()

但是,打开和关闭数据库总是很慢。。。文件上说

打开数据库是一个相对简单的过程 操作成本高,维护成本低 一组开放数据库通常是 比反复打开和关闭更好 关闭每个新数据库的数据库 询问

问题是如何维护该设置?????
我认为一个简单的解决方案是延迟加载

 private static Database db;
     public   CustomerDAO() {
            if (db == null) {
                try {
                    DatabaseConfig dbConfig = new DatabaseConfig();
                    dbConfig.setAllowCreate(true);
                    dbConfig.setType(DatabaseType.BTREE);
                    db = BDBEnvironment.DEFAULT.getEnvironment().openDatabase(null, "C:\\xxxx\\CUSTOMERS",
                            null, dbConfig); 
但这有一个双重检查锁定的问题。。对吧?
另一个问题是我想要一个默认文件名或用户指定的文件名。。当然,创建数据库管理器很容易,但总是会出现双重检查锁定问题。

有没有关于如何维护一组数据库句柄的想法???

使用基本的Java同步技术和线程安全的数据结构(如a)来存储数据库句柄。如果你还没有读过的话,你可能应该读一读,因为它涵盖了这类问题所需要的很多内容。

谢谢你的书:)但是我现在能做什么呢?ConcurrentHashMap是线程安全的,但处理创建?什么时候会发生这种情况?只要以线程安全的方式进行延迟加载,就可以了。或者,创建一个中央初始化例程,提前打开所有需要的数据库。它们之间的选择取决于应用程序的需要。你还应该考虑,虽然甲骨文/睡眠猫说它是“昂贵的”,但是BelkeldB确实很快,你至少应该测量在考虑任何其他方法之前一次打开所有数据库需要多长时间。这可能是相当可以接受的,你的需要,只是打开它们,并完成它。