Я пишу приложение, которое будет запускать несколько потоков - их количество варьируется в зависимости от исполнения, но, как правило, более 5 и менее 100 - каждый из которых будет многократно считываться из базы данных Mongo.
public class MyThread implements Runnable {
private MyMongoClient myMongoClient = MyMongoClient.getInstance();
public MyThread() {
}
@Override
public void run() {
Document myDocument = myMongoClient.getDocumentById("id");
Document newDocument = new Document("id": "newId");
myMongoClient.writeDocument(newDocument);
}
}
У меня есть существующий класс синглтон-сервиса для запроса и обновления Mongo, и я хотел бы получить какие-либо советы по шаблонам для использования в потоках?
public class MyMongoClient {
private static MyMongoClient INSTANCE = new MyMongoClient();
private myCollection;
private MyMongoClient() {
try (MongoClient mongoClient = new MongoClient(host)) {
MongoDatabase db = mongoClient.getDatabase("myDatabase");
myCollection = db.getCollection("myCollection");
}
}
public static MyMongoClient getInstance() {
return INSTANCE;
}
private Document getObjectById(String id) {
// Implementation
}
private write writeDocument(Document document) {
// Implementation
}
}
Как показано, каждый поток будет читать из существующих записей, но не обновлять ни одну из них, и будет писать новые записи, используя тот же сервис
Должен ли каждый поток использовать один и тот же экземпляр службы или мне нужно переписать службу, чтобы у каждого потока был свой экземпляр?