gpt4 book ai didi

java - 共享一个实例,但为每个新进程创建一个新实例

转载 作者:行者123 更新时间:2023-12-01 15:34:20 25 4
gpt4 key购买 nike

这是我的问题--

我有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com