这是我的问题--
我有 4 个类(class) - Starter 、 Database 和 Scheduler 以及一个 Test 类(class)。
测试类将创建 Starter 的新实例(加载并启动整个进程)。 Starter 初始化 Scheduler 和 Database 类。
测试类将数据传递给 Starter。 Starter 将其存储在 Database 类的 HashMap 中。 调度程序从数据库类读取相同 HashMap。
现在,为了确保我的 java 项目中的所有类都访问完全相同的 HashMap,我有 2 个选择 - 使 HashMap 静态 或使数据库成为单例类强>。我现在已经将数据库设置为单例类。
问题——如果测试类这样做
启动器starterInstance1 = new Starter();
启动器starterInstance2 = new Starter();
如何确保 starterInstance1 和 starterInstance2 拥有自己的数据库类或 HashMap 实例?
==========
只是更清楚:
类测试{
Starter start1 = new Starter();//创建我的应用程序的 1 个实例
start1.init();//这将初始化 Scheduler 等并执行“getDatabaseInstance()”
for(int i=0;i<50;i++){
start1.sendData("abc"); //所有这50个请求将提交到一个线程池,该线程池将发送请求以存储在Database类的HashMap中。 HashMap 将被 Scheduler 和其他类同时访问。我已将数据库类设置为单例,以便所有类都将访问同一数据库实例。
}
//类似地创建我的应用程序的另一个实例
启动器start2 = new Starter();
start2.init();//现在如果我执行“getDatabaseInstance()”,我将获得与上面相同的实例。但我想要一个单独的数据库用于这个应用程序实例。我该如何实现这一目标?
for(int i=0;i<50;i++){
start2.sendData("abc");
}
}
最佳答案
对于您的问题,最一般的答案可能是简单地让 Starter
跟踪对其自己的Database
的引用。当然,Scheduler
也必须做同样的事情:
public class Starter {
Database db;
Starter(Database db) {
this.db = db;
}
}
/* ... */
Database db1 = new Database();
Starter starter1 = new Starter(db1);
Scheduler scheduler1 = new Scheduler(db1);
Database db2 = new Database();
Starter starter2 = new Starter(db2);
Scheduler scheduler2 = new Scheduler(db2);
关于java - 共享一个实例,但为每个新进程创建一个新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9139588/