2012-01-31 2 views
2

Как я понимаю, если я открою представление из базы данных, используя db.getView(), не нужно делать это несколько раз из разных потоков.Есть мнения в Domino Thread Safe?

Но предположим, что у меня есть несколько потоков, ищущих вид с помощью getAllDocumentsByKey() Безопасно ли это сделать и параллельно перебирать DocumentCollections?

Кроме того, Document.recycle() беспорядок с DocumentCollection, будет ли это беспорядок друг с другом, если два потока ищут одинаковое значение и имеют одинаковые результаты в своей коллекции?

Примечание: Я только начинаю углубленно изучать это, но подумал, что было бы хорошо документировать здесь, и, может быть, мне повезет, и у кого-то будет ответ.

+0

Вы спрашиваете о классах Java или COM-классов? –

+0

Наверное, я не был уверен в этом. Я говорю о JAVA API – RLZaleski

+0

Java API синхронизирует операции, но подвержен проблемам, когда ваш код изменяет состояние объектов API C, которые соответствуют объектам базы данных, и разделяются между объектами Java через потоки. Я думаю, что вы будете в безопасности с операциями getAllDocumentsByKey, но, учитывая синхронизацию, происходящую за кулисами, я сомневаюсь, что вы получите много преимуществ от многопоточности. Вероятно, у меня бы просто один поток выполнял поиск и отправлял коллекции в рабочие потоки. –

ответ

2

Каждый поток будет иметь свою собственную копию объекта DocumentCollection, возвращаемого методом getAllDocumentsByKey(), поэтому проблем с потоками не будет. Метод recycle() освободит память на вашем объекте, а не самом документе, поэтому снова не будет проблем с потоками.

Вероятно, наиболее вероятная проблема заключается в том, что вы удаляете документ в коллекции в одном потоке, а затем пытаетесь получить доступ к документу в другом. Вы получите ошибку «документ был удален». Вам придется подготовиться к тем типам ошибок и обработать их изящно.

3

Domino Java API не очень любит совместное использование объектов по потокам. Если вы переработаете() одно представление в одном потоке, оно удалит ссылки на backend JNI для всех объектов, ссылающихся на это представление.

Итак, вы найдете, что ваши другие потоки затем сломаны.

Боб Балабан сделал действительно хорошую серию статей о том, как Java API работает и перерабатывается. Вот ссылка на его часть.

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