java - DocumentBuilder.parse() 线程安全吗?

标签 java thread-safety

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

JavaDoc 没有提到这个问题,但 JavaDoc for the same class在 Java 1.4 中明确表示它不是意味着并发的;那么我可以假设在 1.6 中是这样吗?

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

最佳答案

尽管 DocumentBuilder.parse 似乎不会改变它在 Sun JDK 默认实现(基于 Apache Xerces)上所做的构建器。古怪的设计决策。你能做什么?我想使用 ThreadLocal:

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

(免责声明:与其说是试图编译代码。)

关于java - DocumentBuilder.parse() 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56737/

相关文章:

c# - 包含常规集合的并发集合.net

c# - 阻塞全局迭代器有意义吗?

java - Java Android 中动态加载类

如何创建泛型java数组

C++ Vector,从另一个线程崩溃的 push_back?

java - Java swing UI线程和事件按钮事件

c# - 在线程中打开新的子表单

java - 将字符串转换为位数组

java - Spring MVC 表单 :errors not displaying error

java - Bean 属性 'sessionFactory' 不可写或具有无效的设置方法