java - 遍历(读取)静态 DOM 文档对象是否线程安全?

标签 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文档对象被线程共享,但是所有线程都只是读取(遍历)这个文档,那么线程安全吗?

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

谢谢

最佳答案

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

关于java - 遍历(读取)静态 DOM 文档对象是否线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13733083/

相关文章:

ruby - 如何使用 Nokogiri 替换 XML 节点内容

java - Oracle getConnection 慢

java - 第二个 for 循环如何像在第一个 for 循环内一样工作?

jquery - 隐藏文件输入在提交时不保留值

java - 如何通过 XStream 读取带有属性的列表元素

java - 在 java 中查询 xml 的最快方法

java - 从列表中删除符合指定条件的对象

java - 如何在 firebase 数据库上的某个日期之后删除子节点?

javascript - DOM 中的动态 Unicode 生成

javascript - jquery 使用其中的注释选择一个元素