如何临时睡眠()和释放监视器?

时间:2012-10-08 08:14:42

标签: java multithreading sleep wait

我需要睡一段时间并释放监视器。怎么做到这一点?可能要等一些计时器还是什么?

更新

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

3 个答案:

答案 0 :(得分:3)

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

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

  • 不应该一次锁定多个监视器。
  • 不应该使用wait / notify,而是使用并发库。
  • 不应该等待任意时间。
  • 不应该暂时释放锁。您可以使用其他模型来避免这样做。例如演员模特。

答案 1 :(得分:0)

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

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

2)Wait()方法重载以接受以毫秒为单位的时间,但实现只确保在调用wait时立即释放锁。它不保证在经过时间后你将恢复锁定。

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

答案 2 :(得分:0)

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