поделиться экземпляром, но создать новый для каждого нового процесса - PullRequest
0 голосов
/ 04 февраля 2012

вот моя проблема -

У меня есть 4 класса - Starter, Database и Scheduler и тестовый класс.

Тестовый класс создаст новый экземпляр Starter (который загружается и запускаетсявесь процесс).Starter инициализирует классы планировщика и базы данных.

Тестовый класс передает данные в Starter.Starter сохраняет его в HashMap в классе Database.Планировщик читает тот же HashMap из класса Database.

Теперь, чтобы убедиться, что к одному и тому же HashMap имеют доступ все классы во всем моем java-проекте, у меня есть 2 варианта - сделать HashMap static или сделать базу данных одноэлементным классом .Я сделал базу данных одноэлементным классом на данный момент.

Проблема - если тестовый класс делает это

Starter starterInstance1 = new Starter ();

Starter starterInstance2 = new Starter();

как мне обеспечить, чтобы starterInstance1 и starterInstance2 имели свой собственный экземпляр класса Database или HashMap?

==========

Justчтобы быть более понятным:

class Test {

Starter start1 = new Starter (); // создаем 1 экземпляр моего приложения

start1.init (); // thisинициализирует Планировщик и т. д. и выполняет getDatabaseInstance ()

for (int i = 0; i <50; i ++) {</p>

start1.sendData ("abc");// все эти 50 запросов будут отправлены в пул потоков, который отправит запрос на сохранение в HashMap в классе Database.Планировщик и другие классы будут одновременно получать доступ к HashMap.Я сделал синглтон класса Database, чтобы все классы имели доступ к одному и тому же экземпляру DB.

}

// Аналогичным образом создаю другой экземпляр моего приложения

Starter start2= new Starter ();

start2.init (); // теперь здесь, если я сделаю "getDatabaseInstance ()", я получу тот же экземпляр, что и выше.но я хочу отдельную базу данных для этого экземпляра приложения.как мне этого добиться?

для (int i = 0; i <50; i ++) {</p>

start2.sendData ("abc");

}

}

1 Ответ

1 голос
/ 04 февраля 2012

Наиболее общий ответ на ваш вопрос, вероятно, будет состоять в том, чтобы просто позволить 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);
...