Java 5中的线程安全XML验证

Java 5中的线程安全XML验证,java,xml,multithreading,xml-validation,java-5,Java,Xml,Multithreading,Xml Validation,Java 5,因此,我四处寻找线程安全的Java XML验证程序,但似乎不存在: -记录为非线程安全 -记录为非线程安全 -记录为线程安全 除了javax实现之外还有什么?请注意,我在Java5下,不能使用任何Guava库或任何超出ApacheCommons的东西,我已经探索并发现了这些库,但我不确定这是否真的是线程安全的,因为它说明了以下内容: 如果当前的验证器资源相同,那么当前的验证器实例可以安全地重用,只要您已经完成了以前的任何验证,并且一次不尝试使用来自多个线程的特定验证器实例 我假设这意味着,只要我

因此,我四处寻找线程安全的Java XML验证程序,但似乎不存在:

-记录为非线程安全

-记录为非线程安全

-记录为线程安全

除了
javax
实现之外还有什么?请注意,我在
Java5
下,不能使用任何
Guava
库或任何超出
ApacheCommons
的东西,我已经探索并发现了这些库,但我不确定这是否真的是线程安全的,因为它说明了以下内容:

如果当前的验证器资源相同,那么当前的验证器实例可以安全地重用,只要您已经完成了以前的任何验证,并且一次不尝试使用来自多个线程的特定验证器实例

我假设这意味着,只要我的每个线程都有一个实例,那么我们就是在做生意


但我还有其他选择吗?我显然错过了这些选择。

使用内置实例的多个实例。非线程安全只是意味着您不能同时在多个线程之间共享实例(
SimpleDateFormat
Random
就是很好的例子)


您还可以使用
ThreadLocal
为每个线程提供自己的实例(而不是潜在地创建自己的“解决方案”)。

模式必须是线程安全的,因此您可以编译一次模式并在多个线程中重复使用它。您的意思是Xerces模式声称是线程安全的,而事实并非如此:这将是一个问题

验证程序的线程安全性并不重要,因为每次验证实例文档时都应该创建一个新的验证程序

要记住的另一件事是JAXP与DOM密切相关,DOM不是线程安全的。这可能是个大问题


至于您的问题,是否有替代方案,答案是肯定的:Saxon EE提供了一个替代的XSD验证引擎,在编译的模式和实例文档上都具有完全的线程安全性。

有什么原因不能使用多个验证程序吗?我认为这是最明显的选择。它们的创建成本不会太高。我们目前没有访问apache commons的权限,而且我需要审批/繁文缛节才能将其加入到我们的依赖项中,所以我希望有另一个更简单的本机选项。啊,真的那么简单吗?我想我的问题应该是
什么使类线程安全
@确实是罗西娅。线程是复杂的,所以很容易出错,或者不知道一些并发的事情是如何工作的。一个写得好的问题通常会给出正确的答案,即使它可能不是标题中的答案。