使用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);
答案 0 :(得分:2)
MongoDB Java API
和async
对应方之间唯一真正的区别是后者的方法是非阻塞的,并将回调作为参数。这意味着您在回调中收到的内容等同于该方法在非异步API中返回的内容。
在这里,您使用find
方法。它返回&#34;正常&#34;可迭代的,因此在其上调用forEach
将不会导致多个线程。
换句话说,您不需要AtomicInteger
:您的apply
方法会被同一个线程顺序调用。
如果您仍然怀疑或需要&#34;证明&#34;,您可以执行以下操作之一:
System.out.println(Thread.currentThread().getName());
。您将看到它始终由同一个线程执行;