2

使用 VTD 2.11

VTDGen 可以初始化一次并被多个线程使用吗?

例如,我想在 servlet 中使用它,以便 VTGen 在 servlet 初始化时初始化一次,然后每个请求都会解析收到的任何文档。

与 AutoPilot 相同,我想我可以设置一次 XPATH,然后在每次新导航时继续重新绑定它?

4

1 回答 1

1

是的,VTD-XML 可以启动一次并多次使用。但是因为 VTDGen 的初始化成本超低,实例化它的多个副本所产生的成本很小……

AutoPilot 也被设计为可重用……它与 XPath 表达式密切相关。

但是,在许多情况下,将 AutoPilot 实例分配给每个线程是有意义的……这些实例中的每一个都引用相同的 xpath……

举个例子:

AutoPilot ap1 = new AutoPilot();
AutoPilot ap2 = new AutoPilot();

ap1.selectXpath("/a/b/c") // assign to thread 1
ap2.selectXPath("/a/b/c"); // assigned to thread2, 

尽管 ap1 和 ap2 选择了相同的 xpath,但它们是两个不同的 xpath 对象,并且可以由 2 个线程独立评估……这比尝试在 2 个线程之间共享单个 AutoPilot 更好……这会导致不必要的线程争用。 ..

于 2016-02-20T01:15:30.220 回答