我希望在计时器关闭时用Java播放一个简短的声音.wav。规定是我有一堆这样的计时器,很可能不止一个会在同一时间或几乎同时发生。在这种情况下,我希望声音只播放一次,然后放弃其他请求播放声音。我不希望声音重复播放或类似的东西。
对于如何编写类似代码的任何帮助表示赞赏。
答案 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();
}
}
}
}