0

我需要睡一段给定的时间并在这段时间内释放监视器。如何做到这一点?可能是等待一些计时器或什么的?

更新

我正在实现声音处理,如果时间非常先进,需要延迟流读/写。我认为有两种一般的方法:(1)等待大进步(2)有特殊的监视器和计时器来锁定它,直到时间到来。

4

3 回答 3

3

您可以使用 wait() 但它只释放一个监视器,而不是监视器。

根据您的问题,它提出了一些设计问题。理想情况下你

  • 不应该一次锁定多台显示器。
  • 不应该使用等待/通知,而是使用并发库。
  • 不应该等待任意时间。
  • 不应该暂时释放锁。您可以使用其他模型来避免需要这样做。例如演员模型。
于 2012-10-08T08:21:45.273 回答
0

我不确定此功能当前是否可用。原因是

1)一旦你的线程释放了锁,你不能保证在过去的时间(比如 x 秒)之后你肯定会得到锁。JVM 本身并不是这样设计的。

2) Wait() 方法被重载以接受以毫秒为单位的时间,但实现仅确保在调用 wait 时立即释放锁。它不保证您会在经过时间后取回锁。

为什么需要这样的功能?我假设您必须做一些不需要的事情。

于 2012-10-08T08:24:01.933 回答
0

方法 sleep() 不需要获取锁,那么你想释放什么?你如何锁定监视器?

于 2012-10-08T08:30:08.750 回答