2012-12-05 27 views
2

我創建了一個DOM文檔靜態對象,如下面,它使用的javax.xml.parsers *和*的org.w3c.dom API:。遍歷(讀取)靜態DOM文檔對象是否線程安全?

 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文檔對象由線程共享,但所有線程只是讀取(遍歷)這個文檔,線程安全嗎?

我認爲這是因爲閱讀不應該修改這個共享狀態,但不知道內部是否有一些我不知道的魔術。

謝謝

+0

Damm ...正如我試過的,它似乎不是..似乎只讀(如getNodeValue())的一些API修改狀態。 – huican

+0

如果我只讀(遍歷)文檔,是否有人知道任何線程安全的XML庫? – huican

回答

1

通過編寫自己的簡單文檔結構解決了這個問題。例如,將DOM文檔克隆到該文件中,這對讀操作是線程安全的。爲了我自己的目的,在克隆文檔時,除了基於需要的信息(COMMENT_NODE,TEXT_NODE,ELEMENT_NODE,屬性)外,我不會克隆所有內容。

相關問題