gpt4 book ai didi

mongodb - MongoCollection.forEach 是否需要线程安全?

转载 作者:IT老高 更新时间:2023-10-28 12:31:30 27 4
gpt4 key购买 nike

使用 MongoDB 异步 Java 驱动程序时:以下回调需要使用 AtomicInteger 计数器还是普通的 int 来完成这项工作?

Block<Document> theBlock = new Block<Document>() {
AtomicInteger counter = new AtomicInteger();
@Override
public void apply(final Document document) {
counter.incrementAndGet();
}
};
SingleResultCallback<Void> callbackWhenFinished = ...

collection.find().forEach(theBlock, callbackWhenFinished);

最佳答案

MongoDB Java API 和它的 async 对应物之间唯一真正的区别是后者的方法是非阻塞的,并且将回调作为参数。这意味着您在回调中收到的内容等同于方法在非异步 API 中返回的内容。

在这里,您使用 find 方法。它返回一个“正常”的可迭代对象,因此在其上调用 forEach 不会导致多个线程。

换句话说,您不需要 AtomicInteger:您的 apply 方法由同一个线程按顺序调用。


如果您仍有疑问或需要“证明”,您可以执行以下操作之一:

  1. 在你的 block 中添加一个 System.out.println(Thread.currentThread().getName());。你会看到它总是由同一个线程执行;
  2. 在 block 内添加断点,配置为仅停止线程。再一次,断点将阻塞整个代码。

关于mongodb - MongoCollection.forEach 是否需要线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35111888/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com