我越來越從詹金斯,堆棧跟蹤的相關部分的InterruptedException
:如何調試不明原因的線索中斷在Java中
java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
at hudson.remoting.Request.call(Request.java:127)
at hudson.remoting.Channel.call(Channel.java:646)
at hudson.remoting.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:158)
at $Proxy33.join(Unknown Source)
at hudson.Launcher$RemoteLauncher$ProcImpl.join(Launcher.java:861)
該中斷是意外,至今原因不明。我幾乎不可能在調試器的情況下做到這一點,它只發生在生產使用的CI上,而且很少發生,在Jenkins工作執行的1%以下。梳理各種日誌到目前爲止還沒有產生任何有用的提示。遠程Jenkins節點當時似乎沒有斷開連接。
問題:如何找出InterruptedException或其他可能有用的原因,並使用上述約束?
任何其他想法追查這種異常的原因也歡迎!也許是Jenkins/Hudson所特有的,不包括在this earlier question(這裏的答案在這裏並不真正有幫助)。
當您等待條件成立時,您應該調用Object :: wait。如果你被打斷了,情況仍然是錯誤的,那就是一種虛假的喚醒。回到等待模式。 http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait%28%29 – 2013-02-12 08:40:33
@RKajaMohideen是的,除了它不是我的等待,所以看起來像是bug報告時間。 – hyde 2013-02-12 09:59:58
是的。如果圖書館等待一些目的。它必須預見到這種情況會被打斷,並且應該處理要麼再次等待,要麼失敗,而不是向客戶拋出異常。 – 2013-02-12 10:11:43