Lotus notes Domino中的视图是线程安全的吗?

Lotus notes Domino中的视图是线程安全的吗?,lotus-notes,lotus-domino,Lotus Notes,Lotus Domino,据我所知,如果我使用db.getView从数据库打开一个视图,那么从不同的线程多次这样做是没有意义的 但是假设我有多个线程使用getAllDocumentsByKey搜索视图,这样做并并行迭代DocumentCollections安全吗 另外,Document.recycle与DocumentCollection有冲突,如果两个线程搜索相同的值并且在它们的集合中有相同的结果,这会不会相互冲突 注意:我刚刚开始深入研究这个问题,但我认为在这里记录是件好事,也许我会很幸运,有人会找到答案。每个线程都

据我所知,如果我使用db.getView从数据库打开一个视图,那么从不同的线程多次这样做是没有意义的

但是假设我有多个线程使用getAllDocumentsByKey搜索视图,这样做并并行迭代DocumentCollections安全吗

另外,Document.recycle与DocumentCollection有冲突,如果两个线程搜索相同的值并且在它们的集合中有相同的结果,这会不会相互冲突


注意:我刚刚开始深入研究这个问题,但我认为在这里记录是件好事,也许我会很幸运,有人会找到答案。

每个线程都有一个由getAllDocumentsByKey方法返回的DocumentCollection对象的副本,所以不会有任何线程问题。回收方法将释放对象上的内存,而不是文档本身,因此也不会有任何线程问题


最可能出现的问题可能是,您在一个线程中删除集合中的文档,然后在另一个线程中尝试访问该文档。您将得到一个文档已被删除错误。您必须为这些类型的错误做好准备并优雅地处理它们。

DominoJavaAPI实际上不喜欢跨线程共享对象。如果在一个线程中回收一个视图,它将删除引用该视图的所有对象的后端JNI引用

所以你会发现其他的线都断了

Bob Balaban写了一系列关于JavaAPI如何工作和回收的文章。这里是它的一部分链接


你问的是Java类还是COM类?我想我不太清楚。我说的是JAVA API JAVA API同步操作,但是当代码更改与数据库对象相对应的、跨线程在JAVA对象之间共享的C API对象的状态时,很容易出现问题。我认为使用getAllDocumentsByKey操作是安全的,但是考虑到幕后发生的同步,我怀疑通过这种方式进行多线程处理会有多大好处。我可能只需要一个线程进行搜索,并将集合分派给工作线程。