【发布时间】:2012-02-04 08:41:52
【问题描述】:
这是我的问题--
我有 4 个类 - Starter、Database 和 Scheduler 以及一个 Test 类。
测试类将创建一个新的 Starter 实例(它加载并启动整个过程)。 Starter 初始化 Scheduler 和 Database 类。
Test 类将数据传递给 Starter。 Starter 将其存储在 Database 类中的 HashMap 中。 调度器从 Database 类中读取 same HashMap。
现在,为了确保我的 java 项目中的所有类都可以访问完全相同的 HashMap,我有 2 个选项 - 使 HashMap static 或使 Database 成为 单例类强>。我现在已将 Database 设为一个单例类。
问题——如果测试类这样做
Starter starterInstance1 = new Starter();
Starter starterInstance2 = new Starter();
如何确保 starterInstance1 和 starterInstance2 有自己的 Database 类或 HashMap 实例?
===========
更清楚一点:
类测试{
Starter start1 = new Starter();//创建我的应用程序的 1 个实例
start1.init();//这将初始化Scheduler等并执行“getDatabaseInstance()”
for(int i=0;i
start1.sendData("abc"); //所有这50个请求将b提交到一个线程池,该线程池将发送请求存储在Database类的HashMap中。 HashMap 将由 Scheduler 和其他类同时访问。我已将 Database 类设为单例,以便所有类都可以访问同一个 DB 实例。
}
//类似地创建我的应用程序的另一个实例
Starter start2 = new Starter();
start2.init();//现在如果我执行“getDatabaseInstance()”,我将得到与上面相同的实例。但我想要这个应用程序实例的单独数据库。我如何做到这一点?
for(int i=0;i
start2.sendData("abc");
}
}
【问题讨论】:
-
如果数据库是单例,我看不出他们怎么会有不同的实例。这就是单例模式的重点。您的问题的一部分说所有类都必须访问相同的确切映射,另一部分说每个启动器实例都应该有自己的实例。你想要什么?
-
是的,单例意味着只有 1 个实例。但我不想要那个。我的整个应用程序的起点是 Starter 类。每当创建我的应用程序的新实例(即 new Starter())时,我希望它拥有自己的数据库和自己的调度程序,它们将访问同一个数据库。使数据库成为单例类不是这里的解决方案,因为它将意味着每个新的 Starter() 都将使用相同的数据库。我希望每个新的 Starter() 都有自己的数据库
标签: java static singleton instance