0

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

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

4

2 回答 2

0

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

void methode() {
    synchronized(this) {
        //critical section
    }
}
于 2013-10-03T18:20:38.290 回答
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();
      }
    }
  }

}
于 2013-10-03T18:31:05.807 回答