为了账号安全,请及时绑定邮箱和手机立即绑定

在Java线程中使用服务的最佳实践是什么?

在Java线程中使用服务的最佳实践是什么?

小怪兽爱吃肉 2021-04-05 09:09:39
我正在编写一个将启动多个线程的应用程序-每次执行的线程数量有所不同,但通常大于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    }    }如图所示,每个线程将从现有条目中读取,但不会更新其中的任何条目,并将使用相同的服务写入新条目每个线程应该使用服务的相同实例,还是应该重写服务,以便每个线程都有自己的实例?
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

您将得到一个错误,因为您MongoClient在该构造函数中关闭了您的代码。 MongoClient有一个内置的连接池,因此没有必要创建多个连接池。只创建一个并在线程之间共享。


查看完整回答
反对 回复 2021-04-14
  • 2 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信