【问题标题】:How to sleep() and release monitors temporary?如何休眠()和临时释放监视器?
【发布时间】:2012-10-08 08:14:41
【问题描述】:

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

更新

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

【问题讨论】:

  • “监视器”是什么意思?您可能正在寻找 Java 的 waitnotify 框架 here

标签: java multithreading sleep wait


【解决方案1】:

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

从您的问题中可以看出一些设计问题。理想情况下你

  • 不应同时锁定多台显示器。
  • 不应使用等待/通知,而应使用并发库。
  • 不应等待任意时间。
  • 不应暂时释放锁。您可以使用其他模型来避免需要这样做。例如演员模型。

【讨论】:

  • 那么如何实现声音数据管道呢? Writer不应该写得很快,如果想提前大写,应该等待,但应该衡量等待。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我像往常一样用synchronized锁定监视器。
    猜你喜欢
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    相关资源
    最近更新 更多