首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VTD自动驾驶是线程安全的吗?

VTD自动驾驶是线程安全的吗?
EN

Stack Overflow用户
提问于 2013-05-24 13:22:27
回答 1查看 422关注 0票数 3

使用Java 2.11版本。我正在基于CD Catalog数据绑定示例构建一个xml绑定组件。我有一个相当复杂但相当小的大约2000字节的文档。而且AutoPilot.bind()看起来相当慢...

代码语言:javascript
复制
int count = 10000;
long start = System.nanoTime();

for(int i = 0; i <= count; i++)
{
    //Init VTDGen, VTGNav here...

    AutoPilot ap0 = new Autopilot();
    AutoPilot ap1 = new Autopilot();
    AutoPilot ap2 = new Autopilot();
    AutoPilot ap3 = new Autopilot();
    AutoPilot ap4 = new Autopilot();

    // Set the XPAth for auto pilots here...
    // Read bytes and parse...

    // Bind autopilot to NAV.

    MyObj mine = new MyObj();

    // Do data binding here to My Object here...
}

long end = System.nanoTime();
long avgTime = (end - start) / count;

硬件=3 3GH 8核英特尔

平均解析时间约为80000纳秒。

现在,如果您将创建Autopilot移出循环,平均解析时间为10000纳秒。

当然,这在这里是有效的,因为我们一遍又一遍地解析相同的文档。现在,设想一个类似于servlet的服务器场景,其中每个请求都会解析接收到的XML文档。如果我们可以重用自动驾驶而不是创建一个新的,那就太好了。

我记得在某个地方读到过创建一个自动驾驶池,但这并不有趣,特别是当你有十几个自动驾驶仪的时候。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-27 04:08:40

我认为您可能想要为每个线程创建一些包含XPath表达式的autoPilot对象。假设您必须创建10个处理XPath /a/b/c的线程,然后您只需实例化10个线程,每个线程都编译相同的表达式,从而避免了共享问题。

还要注意,不要在任何类型的XPath求值while循环中编译XPath表达式,因为它会减慢。只要可能,就把它从循环中去掉。

因为可以重用AutoPilot对象并避免重复编译XPath表达式,所以管理线程池可能是有意义的。让AutoPilot线程安全可能不是一个好主意,因为它会导致您的线程停止,等待另一个线程释放锁。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16728143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档