2012-01-31 61 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()方法將釋放對象上的內存,而不是文檔本身,因此再次也不會有任何線程問題。

如果您在一個線程中刪除集合中的某個文檔,然後再嘗試在另一個線程中訪問該文檔,可能最有可能發生的問題是。你會得到一個「文件已被刪除」的錯誤。你必須準備好這些類型的錯誤,並妥善處理它們。