首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >现代Java并发

现代Java并发
EN

Stack Overflow用户
提问于 2015-02-21 07:47:29
回答 1查看 670关注 0票数 1

使用较新的Java抽象,如何使线程“停止”?

例如,一个媒体播放器播放一个MP3文件,并有一个暂停按钮,所以使用旧的Java,您可能(大致上)有这样一个类:

代码语言:javascript
复制
 volatile boolean stopPlaying = false;

 new Thread(() - > {
    void play() {
        stopPlaying = false;
        while(songHasntEnded && !stopPlaying) {
            //decode next part of song and play
        }
    }
}).start();

动作侦听器的停止按钮可能包含以下内容:

代码语言:javascript
复制
void stop() {
        stopPlaying = true;
        //close file etc
}

如何使用mp3实现这个场景(或者更一般的场景,我不是试图重新发明java.util.concurrent播放器)?

它是否提供了一种避免使用易失性变量命令线程停止的方法?

它提供了一种“暂停”线程的方式,这样每次我停下来播放另一首歌曲时,就不必创建一个新的线程了吗?

我一直在使用较低级别的线程机制,我认为足够了,所以任何帮助都值得赞赏。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-21 08:04:06

我一直在使用低级的线程机制,我觉得够了.

不幸的是,java.util.concurrent和最近Java库的任何其他部分都没有提供一种新的机制。

您的选项是测试共享变量(volatile或使用synchronized)或使用Thread中断机制。

没有安全可靠的机制来暂停线程。若要了解为什么要为不推荐的javadoc方法读取Thread.suspend()。如果您仔细想想,根本就没有一种安全可靠的方法来暂停线程。不管它的价值是什么,我也想不出任何其他语言支持这种事情(安全)。

例如:

  • 来自pthreads的如何从另一个线程挂起并恢复线程?
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28643463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档