我有以下测试类:
@RunWith(classOf[JUnitRunner])
class NodeScalaSuite extends FunSuite with ScalaFutures {
在其中,我添加了此测试以检查返回未来的方法:
test("Any should return the first future") {
val p = Promise[Int]()
p completeWith Future.any(List(Future{wait(2000); 1}, Future{wait(1); 2}))
whenReady(p.future) {x =>
assert(true)
}
}
(我将断言true
仅用于更简单的调试。)
当我运行测试套件时,我收到此错误:
[info] The future returned an exception of type: java.lang.IllegalMonitorStateException.
是什么导致这种情况?
答案 0 :(得分:1)
根据var _LP_CFG_ = {
app_id: appId,
options: {
triggerSelector: '.chat-btn',
onReady: function () {
LPMobile.on('visitorMessage', function (data) {
// do something
});
LPMobile.on('agentMessage', function(data) {
// do something
})
}
}
};
的文件
如果当前线程不是对象监视器的所有者,则抛出
java.lang.Object#wait
。
这意味着应在IllegalMonitorStateException
块内调用wait
。像synchronized
这样的东西应该有效,但我认为你真正想要做的就是使用synchronized { wait(2000) }
。 Thread.sleep(2000)
旨在与wait
和notify
结合使用,以同步对来自多个线程的共享资源的访问。它释放对象的监视器,以便另一个线程可以执行相同的同步块。