我正在开发一个通过多线程在后台播放音乐的程序,因为GUI会冻结。我有多线程的基本知识(易失性,同步等),但我想知道如何立即停止/暂停一个线程(即使进程正在处理)。我在背景中循环播放音乐,但如果我将一个停止变量挂到循环中,则歌曲必须停止播放以停止播放音乐。所以我的问题仍然存在,从母线程中有任何方法可以立即暂停或终止歌曲中间的音乐,因为我可以播放音频。
答案 0 :(得分:1)
首先,线程中的大多数循环应该类似于:
while(!isInterrupted()) {
try {
// do something (like play song)
} catch (InterruptedException e) {
interrupt();
}
}
如果循环内部存在阻塞调用(听起来与描述类似),则可能允许中断()。从线程外部调用interrupt()将破坏阻塞调用并将您转储到catch块中。这最终会清除“中断”标志,因此您需要再次调用中断以退出循环。
取决于您播放音乐的方式:
请注意,如果要使用上述循环重新启动,则需要嵌套循环,例如:
while(true) {
while(!isInterrupted()) {
...
}
}
如果您只有!isInterrupted()循环,则线程将完成,并且无法重新启动。
希望这有帮助!