3

我创建了一个 DOM 文档静态对象,如下所示,它使用 javax.xml.parsers.* 和 org.w3c.dom.* API:

        DocumentBuilderFactory docBldrFactry = DocumentBuilderFactory.newInstance();
        docBldrObj = docBldrFactry.newDocumentBuilder();

        File file = new File(fileDirectory);
        // Parse the XML file and return a DOM document object

        document = docBldrObj.parse(file);
        //FYI, document is declared as private static org.w3c.dom.Document document elsewhere. 

后来在上面创建之后,如果这个静态DOM文档对象被线程共享,但所有线程都只是读取(遍历)这个文档,它是线程安全的吗?

我认为这是因为 read 不应该修改这个共享状态,但不确定内部是否有一些我不知道的魔法。

谢谢

4

1 回答 1

1

通过编写自己的简单文档结构解决了这个问题。例如,将 DOM 文档克隆到其中,这在读取操作上是线程安全的。仅供参考,出于我自己的目的,在克隆文档时,除了基于我需要的信息(COMMENT_NODE、TEXT_NODE、ELEMENT_NODE、属性)之外,我不会克隆所有内容。

于 2012-12-06T15:35:17.927 回答