Traverse(Read)静态DOM文档对象是否是线程安全的?

时间:2012-12-05 21:48:42

标签: java dom xml-parsing thread-safety

我创建了一个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文档对象由线程共享,但是所有线程都只是读取(遍历)这个文件,它是否是线程安全的?

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

由于

1 个答案:

答案 0 :(得分:1)

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