Java и XML (JAXP) - как насчет кэширования и безопасности потоков? - PullRequest
26 голосов
/ 09 августа 2010
  1. Я хотел бы знать, какие объекты можно использовать повторно (в том же или другом документе) при использовании Java API для обработки XML , JAXP:

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

  3. Использует ли (повторно) из этих объектов поточно-безопасных ?

1 Ответ

27 голосов
/ 09 августа 2010

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

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

Потокобезопасность

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

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...