Java 同步取决于静态字段?

Java 同步取决于静态字段?,java,static,synchronization,Java,Static,Synchronization,我正在使用一个名为XMLUnit的实用程序类,该类具有忽略空白的静态属性。我在测试中使用它,如下所示: XMLUnit.setIgnoreWhitespace(true); DetailedDiff detailedDiff = new DetailedDiff(XMLUnit.compareXML(expected, actual)); detailedDiff.overrideElementQualifier(new ElementNameAndAttributeQ

我正在使用一个名为XMLUnit的实用程序类,该类具有忽略空白的静态属性。我在测试中使用它,如下所示:

    XMLUnit.setIgnoreWhitespace(true);
    DetailedDiff detailedDiff = new DetailedDiff(XMLUnit.compareXML(expected, actual));

    detailedDiff.overrideElementQualifier(new ElementNameAndAttributeQualifier());
    List<Difference> allDifferences = detailedDiff.getAllDifferences();
XMLUnit.setIgnoreWhitespace(true);
DetailedDiff DetailedDiff=新的DetailedDiff(XMLUnit.compareXML(预期,实际));
detailedDiff.overrideElementQualifier(新元素名和属性均衡器());
List allDifferences=detailedDiff.getAllDifferences();
但是有些测试不会忽略空格,我认为我们的Jenkins会并行运行它们。确保我不会影响其他测试的最佳方法是什么?我可以像下面那样在XMLUnit类上同步吗

    synchronized (XMLUnit.class) {
        XMLUnit.setIgnoreWhitespace(true);
        DetailedDiff detailedDiff = new DetailedDiff(XMLUnit.compareXML(expected, actual));

        detailedDiff.overrideElementQualifier(new ElementNameAndAttributeQualifier());
        List<Difference> allDifferences = detailedDiff.getAllDifferences();
        XMLUnit.setIgnoreWhitespace(false);
    }
synchronized(XMLUnit.class){
setIgnoreWhitespace(true);
DetailedDiff DetailedDiff=新的DetailedDiff(XMLUnit.compareXML(预期,实际));
detailedDiff.overrideElementQualifier(新元素名和属性均衡器());
List allDifferences=detailedDiff.getAllDifferences();
setIgnoreWhitespace(false);
}

另外,如果我有多个maven模块正在jenkins上并行构建,它们都使用这个类,那么行为会是什么?每个模块都有自己的XMLUnit.class实例吗?

只要同步类块之外的xml内容没有任何依赖,同步类就可以工作(我的意思是,这不足以同步标志true/false语句,而是所有依赖它的内容;您粘贴的代码似乎是正确的,但您需要知道在同步之外是否还有更多依赖该标志的内容)

如果这隐含地意味着整个测试都在同步块中,那么这实际上意味着该测试上的任何内容都不能并行执行;那么最好对测试进行分类,并确保“依赖xml”的测试按顺序执行(而其余的测试仍然可以并行执行)


关于maven问题,无论它做什么,一切都应该是好的。如果同一个进程的锁将确保没有任何中断;如果不同的进程,测试是完全隔离的。

同步类可以工作,只要在同步类块之外没有任何依赖xml的东西(我的意思是,这不足以同步标志true/false语句,而是所有依赖它的内容;您粘贴的代码似乎是正确的,但您需要知道在同步之外是否还有更多依赖该标志的内容)

如果这隐含地意味着整个测试都在同步块中,那么这实际上意味着该测试上的任何内容都不能并行执行;那么最好对测试进行分类,并确保“依赖xml”的测试按顺序执行(而其余的测试仍然可以并行执行)


关于maven的问题,无论它做什么,一切都应该是好的。如果同一个进程,你的锁将确保没有任何中断;如果不同的进程,测试是完全隔离的。

我认为问题不是同步的。你只需要确保`XMLUnit.setIgnoreWhitespace(true);`在您的测试之前运行-例如,将其置于JUnit注释之前的
@我怀疑您可能必须将您的测试分为可以并行运行的测试和不能并行运行的测试。依赖此属性的测试不能并行运行,如果某些人以某种方式需要它,而其他人以另一种方式需要它。同步可能会对您有所帮助,但d根据测试持续时间,您可能持有锁的时间太长,导致测试超时。这一点很好,但它用于cucumber步骤,而不是JUnit。请不要认为问题是在同步中。您只需要确保`XMLUnit.setIgnoreWhitespace(true);`在您的测试之前运行-例如,将其置于JUnit注释之前的
@我怀疑您可能必须将您的测试分为可以并行运行的测试和不能并行运行的测试。依赖此属性的测试不能并行运行,如果某些人以某种方式需要它,而其他人以另一种方式需要它。同步可能会对您有所帮助,但d根据测试持续时间,您可能持有锁的时间太长,导致测试超时。这一点很好,但它用于cucumber步骤,而不是Junit