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

时间:2012-02-04 08:41:53

标签: java static singleton instance

这是我的问题 -

我有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”);

}

}

1 个答案:

答案 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);