您正在调用
interrupt()正在播放的线程,但
sleep此时可能正在等待。这样会睡着扔一个
InterruptedException。您需要捕获该异常
并 退出循环以停止播放:
try { Thread.sleep(NOTE_DURATION);} catch (InterruptedException e) { // XXX need to stop playing here, maybe return or break? return;}由于
interrupt()也可能在不同的时间出现,因此您需要测试中断状态并退出循环:
if (!paused && !Thread.currentThread().isInterrupted()) { ...同样,需要在两个线程之间共享的所有变量都
synchronized被标记或被标记
volatile。该
paused标志可能应该
volatile在这里:
volatile boolean paused = false
最后,为了后代,当您捕获时
InterruptedException,它将清除线程的中断状态。通常,最好立即在线程上设置中断标志,以便其他人可以对其进行测试:
try { Thread.sleep(NOTE_DURATION);} catch (InterruptedException e) { // re-establish the interrupt condition Thread.currentThread.interrupt(); ...}


