我正在开发一个通过多线程在后台播放音乐的程序,因为否则GUI就会冻结。我对多线程(易失性、同步等)有一定的了解。但我想知道如何立即停止/暂停线程(即使进程正在处理)。我让音乐在背景中循环,但如果我将一个stop变量挂接到循环中,歌曲必须停止播放,音乐才会停止。所以我的问题仍然是,从父线程是否有任何方法可以在歌曲中间立即暂停或终止音乐,因为在它之后我有音频可以播放。
发布于 2012-12-21 12:20:14
首先,线程中的大多数循环应该类似于:
while(!isInterrupted()) {
try {
// do something (like play song)
} catch (InterruptedException e) {
interrupt();
}
}如果在循环中有阻塞调用(听起来像你的描述),它们可能会允许interrupt()。从线程外部调用interrupt()将中断阻塞调用,并将您转储到catch块中。这将清除" interrupt“标志,因此您需要再次调用interrupt来退出循环。
根据您播放音乐的方式:
()方法-你试过调用它吗?
请注意,如果要使用上面的循环重新启动,则需要一个嵌套循环,如下所示:
while(true) {
while(!isInterrupted()) {
...
}
}如果只有!isInterrupted()循环,线程将完成,并且无法重新启动。
希望这能有所帮助!
https://stackoverflow.com/questions/13984039
复制相似问题