5

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

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

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

3 回答 3

1

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

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

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

于 2012-05-11T12:28:15.213 回答
1

您唯一的选择是同步对文档/节点的所有访问。如果封装得很好(DOM 对象由单个类维护,并且所有 DOM 操作都在该类中),那么您可以同步该入口点类。如果节点在其他对象之间传递,那么您将遇到重大问题。您基本上需要决定一个对象,该对象将是您的“锁定”类,并围绕对配置文件 Nodes.js 的所有访问进行同步。

于 2012-05-12T17:21:11.910 回答
0

抱歉,这不是一个真正的答案,但如果用例是要跨多个线程共享的配置文件模型。写入在哪里发生在配置上。如果是一次读取多次使用,就不需要同步了吧?我在这里错过了什么吗?

于 2012-05-12T16:57:10.017 回答