Java and XML (JAXP) - What about caching and thread-safety?

前端 未结 1 626
旧巷少年郎
旧巷少年郎 2020-12-24 12:40
  1. I\'d like to know which objects can be reused (in the same or different document) when using the Java API for XML processing, JAXP:

    <
相关标签:
1条回答
  • 2020-12-24 13:11

    Reuse

    In the same thread those objects can and should be reused. For example you can use the DocumentBuilder to parse multiple documents.

    Thread Safety

    DocumentBuilderFactory used to explicity state it was not thread safe, I believe this is still true:

    An implementation of the DocumentBuilderFactory class is NOT guaranteed to be thread safe. It is up to the user application to make sure about the use of the DocumentBuilderFactory from more than one thread.

    • http://download.oracle.com/javase/1.4.2/docs/api/javax/xml/parsers/DocumentBuilderFactory.html

    From Stack Overflow, DocumentBuilder does not appear to be thread safe either. However in Java SE 5 a reset method was added to allow you to reuse DocumentBuilders:

    • Is DocumentBuilder.parse() thread safe?
    • http://download-llnw.oracle.com/javase/6/docs/api/javax/xml/parsers/DocumentBuilder.html#reset()
    • http://www.junlu.com/msg/289939.html (about DocumentBuilder.reset())

    XPath is not thread safe, from the Javadoc

    An XPath object is not thread-safe and not reentrant. In other words, it is the application's responsibility to make sure that one XPath object is not used from more than one thread at any given time, and while the evaluate method is invoked, applications may not recursively call the evaluate method.

    • http://download-llnw.oracle.com/javase/6/docs/api/javax/xml/xpath/XPath.html

    Node is not thread safe, from Xerces website

    Is Xerces DOM implementation thread-safe? No. DOM does not require implementations to be thread safe. If you need to access the DOM from multiple threads, you are required to add the appropriate locks to your application code.

    • http://xerces.apache.org/xerces2-j/faq-dom.html#faq-1

    ErrorHandler is an interface, so it is up to your implementation of that interface to ensure thread-safety. For pointers on thread-safety you could start here:

    • http://en.wikipedia.org/wiki/Thread_safety
    0 讨论(0)
提交回复
热议问题