org.w3c.dom.Node 的并发与复用

MRa*_*ser 5 java xml multithreading caching

这里我了解到org.w3c.dom.Node(以及同一包中的其他类)不是线程安全的。

我在问自己是否以及应该如何缓存这些类?

  • 有没有最好的方法?
  • 是否存在不可变的包装类?
  • 我应该使用 aThreadLocal作为DocumentBuilder/DocumentBuilderFactory而不是每次都
    重新创建Node吗?
  • 你做什么工作?

mpr*_*vat 1

您不想缓存 XML 文档。最好将其读取/解析为“配置”对象。根据您的配置的复杂或简单程度,它可能是一个简单的 Map 或更复杂的东西。

一个好处(除了从多个线程解析同一文档所带来的并发问题之外)是您的配置不受 XML 格式的束缚。想想过去所有的配置都在属性文件中,然后 XML 出现了,每个开源包都添加了对 XML 的支持。然后注释出现了,当时也支持了。Hibernate 就是一个很好的例子。

您想要做的是解析配置文件并将生成的配置对象而不是源 XML 保留在缓存中。