使用较新的Java抽象,如何使线程“停止”?
例如,一个媒体播放器播放一个MP3文件,并有一个暂停按钮,所以使用旧的Java,您可能(大致上)有这样一个类:
volatile boolean stopPlaying = false;
new Thread(() - > {
void play() {
stopPlaying = false;
while(songHasntEnded && !stopPlaying) {
//decode next part of song and play
}
}
}).start();动作侦听器的停止按钮可能包含以下内容:
void stop() {
stopPlaying = true;
//close file etc
}如何使用mp3实现这个场景(或者更一般的场景,我不是试图重新发明java.util.concurrent播放器)?
它是否提供了一种避免使用易失性变量命令线程停止的方法?
它提供了一种“暂停”线程的方式,这样每次我停下来播放另一首歌曲时,就不必创建一个新的线程了吗?
我一直在使用较低级别的线程机制,我认为足够了,所以任何帮助都值得赞赏。
发布于 2015-02-21 08:04:06
我一直在使用低级的线程机制,我觉得够了.
不幸的是,java.util.concurrent和最近Java库的任何其他部分都没有提供一种新的机制。
您的选项是测试共享变量(volatile或使用synchronized)或使用Thread中断机制。
没有安全可靠的机制来暂停线程。若要了解为什么要为不推荐的javadoc方法读取Thread.suspend()。如果您仔细想想,根本就没有一种安全可靠的方法来暂停线程。不管它的价值是什么,我也想不出任何其他语言支持这种事情(安全)。
例如:
https://stackoverflow.com/questions/28643463
复制相似问题