Dav*_*les 18 java multithreading jaxp
用于状态的Java 1.4 docjavax.xml.parsers.DocumentBuilderFactory毫不含糊:
DocumentBuilderFactory类的实现不保证是线程安全的.用户应用程序要确保从多个线程中使用DocumentBuilderFactory.或者,应用程序可以为每个线程提供一个DocumentBuilderFactory实例.应用程序可以使用工厂的同一实例来获取DocumentBuilder的一个或多个实例,前提是工厂实例一次不在多个线程中使用.
在Java 5的和Java 6的文档,但是,说什么的那种.DocumentBuilderFactory现在是线程安全的,还是Sun刚刚决定警告是否过度,人们应该知道更好?
我实际上已经有一段时间没有看过这个了,但是看看源代码DocumentBuilderFactoryImpl,DocumentBuilderImpl在我看来这可能是一个坏主意。工厂有一堆内部状态,构建器在构建期间修改该状态 - 请参阅构造函数中的调用setDocumentBuilderFactoryAttributesDocumentBuilderImpl。
如果你知道你永远不会传递这些属性,你也许能够逃脱它,但为了安全起见,我想将整个东西包装在一些其他不会暴露危险位的对象中,并且我认为确保每个线程都有一个单独的工厂会更容易。