2012-01-31 7 views
2

私が理解しているように、db.getView()を使用してデータベースからビューを開くと、別のスレッドからこれを複数回実行する必要はありません。ドミノのビューはスレッドセーフですか?

しかし、私は複数のスレッドがgetAllDocumentsByKeyを(使用してビューを検索していたとは)そうと並行してDocumentCollectionsを反復することは安全ですか?

また、Document.recycle()は二つのスレッドであればお互いにこの混乱は、同じ値を検索し、そのコレクション内の同じ結果になります、DocumentCollectionはで台無しに?

注:私はちょうど深さでこれを研究し始めたが、ここでは説明したのは良いことだろうと思った、と多分私は幸運を得るだろうと誰かが答えを持っていますよ。

+0

あなたはJavaクラスやCOMクラスについて尋ねていますか? –

+0

私はそれについて明確ではなかったと思う。私はJava APIについて話しています – RLZaleski

+0

Java APIは操作を同期させますが、コードによってデータベースオブジェクトに対応するC APIオブジェクトの状態が変更され、スレッド間でJavaオブジェクト間で共有される場合に問題になります。私はあなたがgetAllDocumentsByKey操作で安全だと思うが、シーンの裏で起こるシンクロナイゼーションを考えると、このようにマルチスレッド化することで多くの利点を得ることはできないだろう。おそらく、検索を行い、コレクションをワーカースレッドにディスパッチするスレッドを1つだけ持つことになります。 –

答えて

2

各スレッドは、getAllDocumentsByKey()メソッドによって返されたDocumentCollectionオブジェクトの独自のコピーを持つため、スレッドの問題は発生しません。 recycle()メソッドは、ドキュメント自体ではなく、オブジェクト上のメモリを解放するので、スレッドの問題も発生しません。あなたが1つのスレッドでコレクション内の文書を削除し、その後、別の文書にアクセスしようとした場合、あなたが持っているでしょう

おそらく最も可能性の高い問題があります。 「文書が削除されました」というエラーが表示されます。あなたはそのような種類のエラーを準備し、正常に処理する必要があります。

3

は本当にスレッド間でオブジェクトを共有するドミノのJava APIが好きではありません。あるスレッドで1つのビューをリサイクル()すると、そのビューを参照しているすべてのオブジェクトのバックエンドJNI参照が削除されます。

他のスレッドが壊れていることがわかります。

ボブ・バラバンは、Java APIがどのように働くかについての記事やリサイクルの本当に良いシリーズをやりました。ここにその一部へのリンクがあります。

http://www.bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-5-taking-out-the-garbage-java?opendocument&comments

関連する問題