我正在与在单独的线程上运行,在它们之间〜10ms的暂停两个因com.sun.tools.javac.Main.compile()调用运行一个多线程构建。现在(每100个版本左右),第二个javac在第一个javac的输出中抱怨糟糕的类格式。什么是javac/java文件系统并发合同?
这是Linux,但它在所有os'es工作。我在这里面临的约束是什么?
我正在并发构建系统上,所以我调用javacs的原因是因为他们在不同的模块。有确保运行顺序的外部同步(但是当我调用compile()方法时,我实际上并不在一个同步块中),并且我确信它们被一个接一个地调用,约有10个-20ms平均暂停。对于我所能理解的这两个调用compile()应该只是共享文件系统?
编辑2: 调用第二个compile()调用的线程处于wait()状态,直到第一个完成,因此存在顺序同步。但是当我调用实际的调用来编译时,我不在同步块中。编译是一个静态方法,和我假设他们没有在这方面的任何内部安全出版物问题...
编辑3(?):同步调用编译()没有帮助。也没有调用sync()到linux。但是如果可能的话,我还没有在java级别上查看缓冲区缓冲区。
你为什么这么做?请添加更多细节 – 2010-02-17 12:50:28
如果他们是单独的线程,没有同步,你怎么能期望它总是工作?这是合理的,一次在第一次线程将延迟至少10ms。我认为你需要线程之间的同步,或者它们之间有更大的延迟。 – 2010-02-17 13:47:19
我添加了一个编辑;) – krosenvold 2010-02-17 13:57:21