Java и XML (JAXP) - как насчет кеширования и потоковой безопасности?

  1. Я хотел бы знать, какие объекты можно повторно использовать (в том же или другом документе) при использовании Java API для обработки XML, JAXP:

    • DocumentBuilderFactory
    • DocumentBuilder
    • XPath
    • Node
    • ErrorHandler (РЕДАКТИРОВАТЬ: я забыл, что это должно быть реализовано в моем собственном коде, извините)
  2. Рекомендуется ли кэшировать эти объекты или реализации JAXP уже кэшируют их?

  3. Является ли (повторное) использование этих объектов потокобезопасным?


person MRalwasser    schedule 09.08.2010    source источник


Ответы (1)


Повторное использование

В одном потоке эти объекты можно и нужно использовать повторно. Например, вы можете использовать DocumentBuilder для анализа нескольких документов.

Безопасность потоков

DocumentBuilderFactory, используемый для объяснения, что он не является потокобезопасным, я считаю, что это все еще верно:

НЕ гарантируется потокобезопасность реализации класса DocumentBuilderFactory. Пользовательское приложение должно убедиться в использовании DocumentBuilderFactory более чем из одного потока.

Из Stack Overflow DocumentBuilder также не является потокобезопасным. Однако в Java SE 5 был добавлен метод сброса, позволяющий повторно использовать DocumentBuilders:

XPath не является потокобезопасным, из Javadoc

Объект XPath не является потокобезопасным и не реентерабельным. Другими словами, приложение несет ответственность за то, чтобы один объект XPath не использовался более чем из одного потока в любой момент времени, и пока вызывается метод оценки, приложения не могут рекурсивно вызывать метод оценки.

Узел не является потокобезопасным, с веб-сайта Xerces

Является ли реализация Xerces DOM потокобезопасной? Нет. DOM не требует, чтобы реализации были потокобезопасными. Если вам нужно получить доступ к DOM из нескольких потоков, вам необходимо добавить соответствующие блокировки в код вашего приложения.

ErrorHandler - это интерфейс, поэтому безопасность потоков зависит от вашей реализации этого интерфейса. Для указателей на безопасность потоков вы можете начать здесь:

person bdoughan    schedule 09.08.2010
comment
Это с веб-сайта Xerces xerces.apache.org/xerces2 -j / faq-dom.html # faq-1 - person bdoughan; 11.08.2010