这是我的问题 -
我有4个类 - Starter,Database和Scheduler以及Test类。
Test类将创建一个Starter的新实例(它加载并启动整个过程)。 Starter初始化Scheduler和Database类。
测试类将数据传递给Starter。 Starter将它存储在Database类的HashMap中。 Scheduler从Database类中读取相同的 HashMap。
现在为了确保整个java项目中所有类都可以访问完全相同的HashMap,我有2个选项 - 使HashMap 静态或使数据库成为单例类。我现在已经使数据库成为单例类。
问题 - 如果Test类执行此操作
Starter starterInstance1 = new Starter();
Starter starterInstance2 = new Starter();
我如何确保starterInstance1和starterInstance2拥有自己的Database类实例或HashMap?
==========
更清楚:
班级考试{
Starter start1 = new Starter(); //创建我的应用程序的一个实例
start1.init(); //这将初始化Scheduler等并执行“getDatabaseInstance()”
for(int i = 0; i< 50; i ++){
start1.sendData( “ABC”); //所有这50个请求都将提交给一个线程池,该线程池将发送请求存储在Database类的HashMap中。 Scheduler和其他类将同时访问HashMap。我已经使Database类单例,所以所有类都将访问相同的DB实例。
}
//同样创建我的应用程序的另一个实例
Starter start2 = new Starter();
start2.init(); //现在如果我执行“getDatabaseInstance()”,我将获得与上面相同的实例。但我想为这个应用程序实例提供一个单独的数据库。我怎么做到这一点?
for(int i = 0; i< 50; i ++){
start2.sendData( “ABC”);
}
}
答案 0 :(得分:1)
您问题的最常见答案可能是让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);