当前位置:  开发笔记 > 编程语言 > 正文

DocumentBuilder.parse()线程安全吗?

如何解决《DocumentBuilder.parse()线程安全吗?》经验,为你挑选了2个好方法。

标准的Java 1.6 javax.xml.parsers.DocumentBuilder类是否安全?从多个线程并行调用parse()方法是否安全?

JavaDoc没有提到这个问题,但Java 1.4中同一类的JavaDoc明确表示它并不意味着并发; 所以我可以假设在1.6中它是?

原因是我在ExecutorService中运行了数百万个任务,每次调用DocumentBuilderFactory.newDocumentBuilder()似乎都很昂贵.



1> Tom Hawtin -..:

即使DocumentBuilder.parse看起来不会改变它在Sun JDK默认实现(基于Apache Xerces)上的构建器.偏心的设计决定.你能做什么?我想使用ThreadLocal:

private static final ThreadLocal builderLocal =
    new ThreadLocal() {
        @Override protected DocumentBuilder initialValue() {
            try {
                return
                    DocumentBuilderFactory
                        .newInstance(
                            "xx.MyDocumentBuilderFactory",
                            getClass().getClassLoader()
                        ).newDocumentBuilder();
            } catch (ParserConfigurationException exc) {
                throw new IllegalArgumentException(exc);
            }
        }
    };

(免责声明:与尝试编译代码不同.)



2> Trenton..:

DocumentBuilder上有一个reset()方法,它将其恢复到首次创建时的状态.如果您正在使用ThreadLocal路线,请不要忘记给它打电话或者你已经开了.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有