http://xerces.apache.org/xerces2-j/faq-dom.html говорит
Нет. ДОМ не требует
реализации должны быть потокобезопасными. Если
вам нужно получить доступ к DOM из
несколько потоков, вы обязаны
добавьте соответствующие замки к вашему
код приложения.
Не видя реализации, невозможно узнать, использует ли selectSingleNode
какое-либо общее состояние для чтения DOM. Я думаю, что безопаснее предположить, что это не потокобезопасно.
Альтернативой является использование собственного процессора XPath, такого как Jaxen, который является поточно-ориентированным.
Объекты XPath полностью реентерабельны и
потокобезопасный. Они не содержат внутренних
состояние для оценки и, следовательно, может быть
легко кэшируется и разделяется внутри
приложение. Как только у вас есть XPath
объект, вы можете применить его против
различные начальные контексты и извлекать
результаты в нескольких разных направлениях:
--- Введение в SAX path и Jaxen
JAXEN Jira имеет различные исправления для проблем с многопоточностью, свидетельствующие о том, что Jaxen спроектирован как поточно-ориентированный. Это один Я случайно наткнулся.
И подтверждение того, что Jaxen является поточно-ориентированным от одного из авторов.
Наряду с поточной безопасностью, Jaxen не зависит от модели - он работает со многими моделями (W3C DOM, XOM, Dom4J, JDOM), и пользовательские модели можно подключить, реализовав пару интерфейсов.
Я бы предположил, что простые методы доступа и итераторы в DOM W3C являются потокобезопасными. Но это только догадка, а не конкретный факт. Если вы хотите быть на 100% уверенным, то используйте DOM, предназначенный для безопасности потоков, например, dom4j .
Некоторые ресурсы для начала:
- Пример использования Jaxen .
- Jaxen FAQ и домашняя страница