2011-10-13 28 views
0

有一個例子代碼在這裏:如何通過JDOM重用XPath實例(線程安全)?

x = XPath.newInstance("//collection/dvd[@id='B']"); 
Element e = (Element)x.selectSingleNode(doc); 
listElement(e, ""); 

的問題在我的是我怎麼可以把它快,如果代碼通常被稱爲。文檔中沒有提及任何內容(XPath API doc)。

  • 我的xpath評估器是否緩存在窗簾後面? (我不這麼認爲)
  • xpath評估器是否可以通過JDOM進行線程安全? - >可以緩存在一個靜態地圖中
  • 如果不是線程安全的,也許他們可以緩存在一個線程本地的地圖中
  • 它們是昂貴的對象嗎?生產它們需要很長時間嗎?他們消耗多少內存?
  • 可以更改xpath評估程序。你推薦哪個實現?它們與上述問題的觀點不同嗎?

如果您有JDOM和XPath的經驗,請讓我知道答案。

回答

2

爲了記錄,將JDOM鏈接到默認實現Jaxen的適配器是而不是線程安全。這很容易從org.jdom.xpath代碼的快速研究中得出結論。

至於關於線程安全性的更一般性問題:如果API的文檔沒有明確聲明是線程安全的,那麼假設必須始終不是(並且幾乎總是如此)。而且,對線索安全要求提出質疑總是謹慎的。

1

可能很難找到回答這些問題的文檔:例如,很多人都驚訝地發現DOM不是線程安全的。我相信JDOM是,但我不知道它的XPath引擎。如果您使用Saxon作爲您的XPath引擎(它與JDOM一起工作),s9api接口的明確設計允許在一個線程中創建編譯表達式,並在多個線程中併發使用。