只有当前没有其他人正在播放时,我该如何播放声音?

时间:2013-10-03 18:07:01

标签: java audio timer locking mutex

我希望在计时器关闭时用Java播放一个简短的声音.wav。规定是我有一堆这样的计时器,很可能不止一个会在同一时间或几乎同时发生。在这种情况下,我希望声音只播放一次,然后放弃其他请求播放声音。我不希望声音重复播放或类似的东西。

对于如何编写类似代码的任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

您必须使用读/写互斥锁。看看如何使用“synchronized”:

void methode() {
    synchronized(this) {
        //critical section
    }
}

答案 1 :(得分:0)

您可以在播放声音时使用ReentrantLock实例。这比使用内部锁(使用synchronized关键字)更好,因为您可以检测锁是否立即可用。如果不是,则表示另一个计时器线程已经在播放声音,并且可以忽略此请求。

final class SoundPlayer {

  private final Lock lock = new ReentrantLock();

  ...

  void play(SomeTypeRepresentingTheSound clip) {
    if (lock.tryLock()) {
      try {
        /* Play clip. */
        ...
      } finally {
        lock.unlock();
      }
    }
  }

}