在使用 Java API进行XML 处理时,我想知道哪些对象可以重用(在相同或不同的文档中),JAXP:
DocumentBuilderFactory
DocumentBuilder
XPath
Node
ErrorHandler
是否建议缓存这些对象或者JAXP实现是否已经缓存它们?
这些对象的(重新)使用 线程安全?
答案 0 :(得分:27)
<强>重用强>
在同一个线程中,这些对象可以而且应该被重用。例如,您可以使用DocumentBuilder来解析多个文档。
线程安全
DocumentBuilderFactory用于说明它不是线程安全的,我相信这仍然是正确的:
实施 DocumentBuilderFactory类不是 保证是线程安全的。它起来了 到用户应用程序以确保 关于使用的 来自多个的DocumentBuilderFactory 一个帖子。
从Stack Overflow,DocumentBuilder似乎也不是线程安全的。但是在Java SE 5中添加了一个重置方法,允许您重用DocumentBuilders:
XPath不是线程安全的,来自Javadoc
XPath对象不是线程安全的 不可重入。换句话说,它是 应用程序的责任 确保没有一个XPath对象 在任何一个线程中使用 给定的时间,并评估 方法被调用,应用程序可以 不递归调用evaluate 方法
节点不是线程安全的,来自Xerces网站
是Xerces DOM实现 线程安全的?没有.DOM没有 要求实现是线程 安全。如果您需要访问DOM 从多个线程,你是 需要添加适当的锁 到您的应用程序代码。
ErrorHandler是一个接口,因此由您实现该接口以确保线程安全。有关线程安全的指导,您可以从这里开始: