共享一个实例,但为每个新进程创建一个新实例
这是我的问题
- 我有 4 个类 - Starter 、 Database 和 Scheduler 以及一个 Test 类。
测试类将创建 Starter 的新实例(加载并启动整个进程)。 Starter 初始化 Scheduler 和 Database 类。
测试类将数据传递给 Starter。 Starter 将其存储在 Database 类的 HashMap 中。 调度程序从数据库类读取相同 HashMap。
现在,为了确保我的 java 项目中的所有类都访问完全相同的 HashMap,我有 2 个选择 - 使 HashMap 静态 或使 Database 成为单例类。我现在已经将数据库设置为单例类。
问题 - 如果 Test 类执行此
Starter starterInstance1 = new Starter();
启动器 starterInstance2 = new Starter();
我如何确保 starterInstance1 和 starterInstance2 有自己的数据库类或 HashMap 实例?
==========
只是更清楚:
class Test{
Starter start1 = new Starter();//创建我的应用程序的 1 个实例
start1.init();//这将初始化 Scheduler 等并执行"getDatabaseInstance()"
for(int i=0;i<50;i++){
start1.sendData("abc"); //所有这50个请求将提交到一个线程池,该线程池将发送请求以存储在Database类的HashMap中。 HashMap 将被 Scheduler 和其他类同时访问。我已经将数据库类设置为单例,以便所有类都将访问相同的数据库实例。
}
//类似地创建我的应用程序的另一个实例
Starter start2 = new Starter();
start2.init();//现在如果我执行“getDatabaseInstance()”,我将获得与上面相同的实例。但我想要一个单独的数据库用于这个应用程序实例。我该如何实现这一目标?
for(int i=0;i<50;i++){
start2.sendData("abc");
}
}
here is my problem--
I have 4 classes - Starter , Database and Scheduler and a Test class.
Test class will create a new instance of Starter (which loads and starts the entire process).
Starter initializes Scheduler and Database classes.
Test class passes a data to Starter. Starter stores it in a HashMap in Database class.
Scheduler reads the same HashMap from Database class.
Now to ensure that the exact same HashMap is access by all classes throughout my java project, I have 2 options-- to make HashMap static or to make Database a singleton class. I have made Database a singleton class for now.
The problem-- if Test class does this
Starter starterInstance1 = new Starter();
Starter starterInstance2 = new Starter();
how do i ensure starterInstance1 and starterInstance2 have their own instance of Database class or the HashMap?
==========
Just being more clear:
class Test{
Starter start1 = new Starter();//creating 1 instance of my application
start1.init();//this will initialize Scheduler etc and do a "getDatabaseInstance()"
for(int i=0;i<50;i++){
start1.sendData("abc");
//all these 50 requests will b submitted to a threadpool that will send request to be stored in HashMap in Database class. The HashMap will be accessed concurrently by Scheduler and other classes. I have made the Database class singleton so that all classes will be accessing the same instance of DB.
}
//Similarly creating another instance of my application
Starter start2 = new Starter();
start2.init();//now here if I do "getDatabaseInstance()", i will get the same instance as above. but i want a separate Database for this instance of application. how do i achieve this?
for(int i=0;i<50;i++){
start2.sendData("abc");
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于您的问题,最普遍的答案可能是简单地让
Starter
跟踪对其自己的Database
的引用。当然,Scheduler
也必须做同样的事情:The most general answer to your question would probably be to simply let
Starter
keep track of a reference to its ownDatabase
. Of course,Scheduler
would have to do the same thing: