Java 和 XML (JAXP) - 缓存和线程安全怎么样?

发布于 2024-09-13 10:39:08 字数 450 浏览 4 评论 0原文

  1. 我想知道在使用 Java API for XML 处理、JAXP 时哪些对象可以重用(在相同或不同的文档中):

    • DocumentBuilderFactory
    • 文档生成器
    • XPath
    • 节点
    • ErrorHandler (编辑:我忘记这必须在我自己的代码中实现,抱歉)
  2. 是否建议缓存这些对象,或者 JAXP 实现是否已经缓存它们?

  3. 这些对象的(重新)使用是否线程安全

  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:

    • DocumentBuilderFactory
    • DocumentBuilder
    • XPath
    • Node
    • ErrorHandler (EDIT: I forgot that this has to be implemented in my own code, sorry)
  2. Is it recommended to cache those objects or do the JAXP implementations already cache them?

  3. Is the (re)use of those objects thread-safe?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尾戒 2024-09-20 10:39:08

重用

在同一个线程中,这些对象可以而且应该重用。例如,您可以使用 DocumentBuilder 来解析多个文档。

线程安全

DocumentBuilderFactory曾经明确声明它不是线程安全的,我相信这仍然是正确的:

实施
DocumentBuilderFactory 类不是
保证线程安全。起来了
到用户应用程序以确保
关于使用
DocumentBuilderFactory 来自以上
一个线程。

从 Stack Overflow 来看,DocumentBuilder 似乎也不是线程安全的。然而,在 Java SE 5 中添加了重置方法,以允许您重用 DocumentBuilder:

XPath 不是线程安全的,来自 Javadoc

XPath 对象不是线程安全的,并且
不可重入。换句话说,就是
应用程序的责任
确保一个 XPath 对象不是
任何时候都被多个线程使用
给定时间,同时评估
方法被调用,应用程序可以
不递归调用评估
方法。

节点不是线程安全的,来自 Xerces 网站

Xerces DOM 实现
线程安全?不,DOM 没有
要求实现是线程的
安全的。如果您需要访问 DOM
从多个线程,你是
需要添加适当的锁
到您的应用程序代码。

ErrorHandler 是一个接口,因此由您实现该接口来确保线程安全。有关线程安全的指导,您可以从这里开始:

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.

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:

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.

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.

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:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文