我越来越从詹金斯,堆栈跟踪的相关部分的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