当计时器响起时,我想在 Java 中播放一个简短的声音 .wav。规定是我有一堆这样的计时器,很可能不止一个会同时或几乎同时关闭。在这种情况下,我希望声音只播放一次,然后放弃其他播放声音的请求。我不希望声音连续播放或类似的东西。
任何有关如何编写类似代码的帮助表示赞赏。
您必须使用读/写互斥锁。看看如何使用“同步”:
void methode() {
synchronized(this) {
//critical section
}
}
ReentrantLock
您可以在播放声音时使用实例。这比使用内部锁(带有synchronized
关键字)要好,因为您可以检测锁是否立即可用。如果没有,则表示另一个定时器线程已经在播放声音,可以忽略此请求。
final class SoundPlayer {
private final Lock lock = new ReentrantLock();
...
void play(SomeTypeRepresentingTheSound clip) {
if (lock.tryLock()) {
try {
/* Play clip. */
...
} finally {
lock.unlock();
}
}
}
}