Подтвердить что ты не робот

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

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

    • DocumentBuilderFactory
    • DocumentBuilder
    • XPath
    • Node
    • ErrorHandler (EDIT: Я забыл, что это должно быть реализовано в моем собственном коде, извините)
  • Рекомендуется ли кешировать эти объекты или реализация JAXP уже кэширует их?

  • Используется ли (re) для этих объектов потокобезопасным?

4b9b3361

Ответ 1

Многократное

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

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

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

Реализация Класс DocumentBuilderFactory НЕ гарантированно быть потокобезопасным. Это до к пользовательскому приложению, чтобы убедиться об использовании DocumentBuilderFactory больше, чем один поток.

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

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

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

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

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

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