我正在與在單獨的線程上運行,在它們之間〜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