用于MongoDB的java DBCursor

时间:2013-05-26 10:49:34

标签: mongodb thread-safety lazy-evaluation mongodb-java

DBCursor的JavaDoc表示结果是从数据库中提取的。但

public class DBApiLayer extends DB {
    ...
    private void init( Response res ){
    ...
       _cur = res.iterator()
    ...
    }
    Iterator<DBObject> _cur;
    ...
}

包含与查询匹配的所有项目(根据我的理解,它们采用堆)。并发db.collection.update(...)不会更改这些对象。是否将所有对象存储在堆thread safe实现中?

请解释一下,在这种情况下,'懒惰'和'线程安全'是什么意思。

1 个答案:

答案 0 :(得分:0)

“Lazy”意味着懒惰地请求下一批,因为客户端遍历DBCursor。因此,如果您提前退出迭代,则不会获取其余结果。

您引用的页面中的“线程安全”并不意味着驱动程序中的每个类都可以安全地同时使用我的多个线程。实际上,MongoClient,DB和DBCollection是线程安全的,而DBCursor和DBObject则不是。