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

标签 java static singleton instance

这是我的问题--

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

相关文章:

java - 如何在worklight 8.0 android中使用WLResourceRequest

java - 将带时区的 Joda-Time `DateTime` 转换为不带时区的 DateTime?

java - 使用正则表达式解析 URL 哈希

java - 使用反射的静态方法

multithreading - 确保只有一个服务实例在 Clojure 中运行/启动/停止的规范方法?

python - Django保存全局API客户端实例变量的正确方法

ruby - BasicObject 的 singleton_class 的父类(super class)如何以及为什么是 Ruby 中的 Class 类?

java - 如何使用java查找纪元格式的GMT当前时间

c# - 在 WPF (MVVM) 中使模型静态化是一种好习惯吗?

java - Java 中的 static 关键字本身