2011-10-13 63 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接口的明确设计允许在一个线程中创建编译表达式,并在多个线程中并发使用。