Testng抛出java.lang.IllegalMonitorStateException

时间:2014-11-12 13:09:18

标签: java exception testng

我使用testng作为我的自动化框架。当在测试用例中执行下面的代码行时,会产生java.lang.IllegalMonitorStateException

有人可以建议如何解决这个问题吗?我的方法应该等待2分钟。

{
    TimeUnit.MINUTES.wait(2);
}

2 个答案:

答案 0 :(得分:0)

正如javadoc所说:

  

当前线程必须拥有此对象的监视器。

换句话说,您只能在Object.wait方法或块中的对象上调用synchronized来锁定您正在等待的对象。

您应该使用Thread.sleep(...)TimeUnit.sleep(...)。阅读相应的javadoc以了解参数的单位。

如果您使用wait,那么您的使用情况也会因其他原因而不正确。虽然看起来就像你在等待2分钟,但你实际等待2毫秒......因为你正在调用Object wait的实现}}。如果您想使用TimeUnit版本,则代码需要如下所示:

synchronized lock {
    TimeUnit.MINUTES.timedWait(lock, 2);
}

其中lock是我们用于锁定的合适(私有,非共享)对象。

另外,请注意,如果通知锁定/锁定对象,那么您的wait(...)电话会提前唤醒。如果不是所有您只想等待一段时间的情况,这会导致wait和不恰当的解决方案。

答案 1 :(得分:0)

使用TimeUnitLock时,您必须注意不要意外调用从java.lang.Object继承的方法,即waitnotify等因为它们有完全不同的语义。

对于您想要达到的目标,您必须致电TimeUnit.MINUTES.sleep(2)