定时等待认证模拟考试
Certification practice exam on timed wait
为什么第二个答案是正确的?抛出了什么异常,为什么?
P.S。谢谢解答!
现在我看到 t1.wait()
应在 synchronized(t1)
内 - 在 t1 上,用于调用 wait() 的同一实例。 this answer 也很有帮助。
这是 免费 测试取自 here
由于此代码调用 t1.wait
时未持有 t1
对象的锁 - IllegalMonitorStateException
将被抛出 - 如 Object::wait(time)
方法中所述。这是一个 RuntimeException
,因此不必在方法签名中指定。 Bees::go
方法上的 synchronized
将确保调用此方法的线程将锁定 Bees
对象 - 而不是 t1
对象。
为什么第二个答案是正确的?抛出了什么异常,为什么?
P.S。谢谢解答!
现在我看到 t1.wait()
应在 synchronized(t1)
内 - 在 t1 上,用于调用 wait() 的同一实例。 this answer 也很有帮助。
这是 免费 测试取自 here
由于此代码调用 t1.wait
时未持有 t1
对象的锁 - IllegalMonitorStateException
将被抛出 - 如 Object::wait(time)
方法中所述。这是一个 RuntimeException
,因此不必在方法签名中指定。 Bees::go
方法上的 synchronized
将确保调用此方法的线程将锁定 Bees
对象 - 而不是 t1
对象。