Я хотел бы знать, какие объекты можно повторно использовать (в том же или другом документе) при использовании Java API для обработки XML , JAXP:
DocumentBuilderFactory
DocumentBuilder
XPath
Узел
ErrorHandler
Рекомендуется ли кэшировать эти объекты или реализации JAXP уже кэшируют их?
Является ли (повторно) использовать этих объектов поточно-ориентированным ?
Использовать повторно
В одном потоке эти объекты можно и нужно использовать повторно. Например, вы можете использовать DocumentBuilder для анализа нескольких документов.
Потоковая безопасность
DocumentBuilderFactory, использованная для явного указания, что она не была потокобезопасной, я считаю, что это все еще верно:
Реализация DocumentBuilderFactory класс НЕ гарантированно потокобезопасный. Это до в пользовательское приложение, чтобы убедиться об использовании DocumentBuilderFactory из более чем один поток.
Из Stack Overflow DocumentBuilder тоже не является потокобезопасным. Однако в Java SE 5 был добавлен метод сброса, позволяющий повторно использовать DocumentBuilders:
XPath не потокобезопасность, из Javadoc
. Объект XPath не является потокобезопасным и не реентерабельный.Другими словами, это ответственность приложения перед убедитесь, что один объект XPath не используется более чем из одного потока в любом дано время, а пока оценка вызывается метод, приложения могут не рекурсивно вызывать оценку метод.
Узел не является потокобезопасным, с веб-сайта Xerces
Является ли Xerces DOM выполнение потокобезопасный? Нет. DOM не требовать, чтобы реализации были потоками безопасно. Если вам нужен доступ к DOM из нескольких потоков, вы требуется добавить соответствующие замки в код вашего приложения.
ErrorHandler - это интерфейс, поэтому обеспечение безопасности потоков зависит от вашей реализации этого интерфейса. Для указателей на безопасность потоков вы можете начать здесь: