jac*_*ack 5 mongodb mongodb-java mongodb-query
使用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);
Run Code Online (Sandbox Code Playgroud)
MongoDB Java API与其对应的唯一真正区别async是后者的方法是非阻塞的并且采用回调作为参数。这意味着您在回调中收到的内容与该方法在非异步 API 中返回的内容相同。
在这里,您使用该find方法。它返回一个“正常”迭代,因此调用forEach它不会导致多个线程。
换句话说,您不需要AtomicInteger:您的apply方法由同一线程顺序调用。
如果您仍然有疑问或需要“证明”,您可以执行以下操作之一:
System.out.println(Thread.currentThread().getName());在你的块内添加一个。你会看到它总是由同一个线程执行;| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |