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

发布于 2025-01-02 09:13:42 字数 1231 浏览 1 评论 0原文

这是我的问题

- 我有 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谁把谁当真 2025-01-09 09:13:42

对于您的问题,最普遍的答案可能是简单地让 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);

The most general answer to your question would probably be to simply let Starter keep track of a reference to its own Database. Of course, Scheduler would have to do the same thing:

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文