2012-01-31 32 views
2

据我所知,如果我使用db.getView()从数据库中打开视图,那么从不同线程多次执行此操作就没有意义。Domino线程安全吗?

但假设我有多个线程使用getAllDocumentsByKey()来查找视图是否安全地这样做并且并行遍历DocumentCollections?

此外,如果两个线程搜索相同的值并在其集合中具有相同的结果,则DocumentCollection中的Document.recycle()混淆会相互混淆吗?

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

+0

你在问关于Java类还是COM类? – 2012-01-31 02:02:35

+0

我想我对此并不清楚。我正在谈论JAVA API – RLZaleski 2012-01-31 17:09:41

+0

Java API同步操作,但当代码更改与数据库对象对应的C API对象的状态并且在跨线程的Java对象之间共享时,它们很容易出现问题。我认为你可以通过getAllDocumentsByKey操作来保证安全,但考虑到幕后发生的同步化,我怀疑你会以这种方式从多线程中获得很多优势。我可能只需要一个线程执行搜索并将集合分派给工作线程。 – 2012-02-01 02:17:03

回答

2

每个线程将拥有自己的由getAllDocumentsByKey()方法返回的DocumentCollection对象的副本,因此不会有任何线程问题。 recycle()方法将释放对象上的内存,而不是文档本身,因此再次也不会有任何线程问题。

如果您在一个线程中删除集合中的某个文档,然后再尝试在另一个线程中访问该文档,可能最有可能发生的问题是。你会得到一个“文件已被删除”的错误。你必须准备好这些类型的错误,并妥善处理它们。