2012-12-05 2 views
2

가 나는 javax.xml.parsers의 사용, 등 아래로, DOM 문서 정적 객체를 생성 * 및 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 ... 시도한 것처럼 보이지 않습니다. readonly (getNodeValue() 등)로 보이는 일부 API는 상태를 수정합니다. – huican

+0

문서를 읽는 (트래버스) 경우에만 스레드 안전 XML 라이브러리를 아는 사람이 있습니까? – huican

답변

1

독자적인 간단한 문서 구조를 작성하여 문제를 해결했습니다. 예를 들어 DOM 문서를 복제하여 읽기 작업에서 스레드로부터 안전합니다. FYI, 내 자신의 목적을 위해 문서를 복제 할 때 필자는 필요에 따라 정보를 복제하지 않고 (COMMENT_NODE, TEXT_NODE, ELEMENT_NODE, attributes) 복제합니다.

관련 문제