使用 VTD 2.11
VTDGen 可以初始化一次并被多个线程使用吗?
例如,我想在 servlet 中使用它,以便 VTGen 在 servlet 初始化时初始化一次,然后每个请求都会解析收到的任何文档。
与 AutoPilot 相同,我想我可以设置一次 XPATH,然后在每次新导航时继续重新绑定它?
使用 VTD 2.11
VTDGen 可以初始化一次并被多个线程使用吗?
例如,我想在 servlet 中使用它,以便 VTGen 在 servlet 初始化时初始化一次,然后每个请求都会解析收到的任何文档。
与 AutoPilot 相同,我想我可以设置一次 XPATH,然后在每次新导航时继续重新绑定它?
是的,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 更好……这会导致不必要的线程争用。 ..