Безопасны ли представления в Domino Thread? - PullRequest
2 голосов
/ 31 января 2012

Насколько я понимаю, если я открываю представление из базы данных с помощью db.getView (), нет смысла делать это несколько раз из разных потоков.

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

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

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

Ответы [ 2 ]

3 голосов
/ 31 января 2012

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

Таким образом, вы обнаружите, что ваши другие темы будут нарушены.

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

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

2 голосов
/ 31 января 2012

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

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

...