首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java启动和停止线程

Java启动和停止线程
EN

Stack Overflow用户
提问于 2018-06-12 02:56:07
回答 3查看 526关注 0票数 0

我不知道如何在Java中停止Thread

我有一个创建并启动Threadfunction。现在,当我启动程序时,我想让它启动Thread。在此之后,如果按下button,则我希望Thread停止,当再次按下button时,我希望Thread重新开始,或重新开始(无关紧要)。

我创建Threadfunction

代码语言:javascript
复制
private void startRecordingUserInput() {
    AudioDispatcher dispatcher =
            AudioDispatcherFactory.fromDefaultMicrophone(44100, 2048, 0);


    PitchDetectionHandler pdh = new PitchDetectionHandler() {
        @Override
        public void handlePitch(PitchDetectionResult res, AudioEvent e) {
            final float pitchInHz = res.getPitch();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    pitchText.setText("" + pitchInHz);
                    gameView.setSingerArrowPitch(pitchInHz);
                    gameView.setCurrentTime(mid);
                    gameView.invalidate();
                }
            });
        }
    };
    AudioProcessor pitchProcessor = new PitchProcessor(PitchProcessor.PitchEstimationAlgorithm.FFT_YIN, 44100, 2048, pdh);
    dispatcher.addAudioProcessor(pitchProcessor);

    Thread audioThread = new Thread(dispatcher, "Audio Thread");
    audioThread.start();
} 

以及我启动它并想要对Thread执行start/stop的部分。

代码语言:javascript
复制
    //Start the Thread
    startRecordingUserInput();

    playRecordButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(!isPlaying){

                //Start the Thread again if it is not running or 
                //make a new one

                isPlaying = true;

            } else if(isPlaying){

                //Stop the Thread

                isPlaying = false;

            }
        }
    });
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-13 00:59:27

对于将来可能使用TarsosDSP并面临相同问题的任何人来说,最简单的方法就是创建一个全局dispatcher

代码语言:javascript
复制
dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);

然后简单地用下面的命令stop Thread

代码语言:javascript
复制
dispatcher.stop();
票数 0
EN

Stack Overflow用户

发布于 2018-06-12 03:11:57

一个线程一直运行到它的run方法完成,所以如果你想继续运行它,然后在run方法中添加一个无限循环,然后在run方法中添加一个"isPlaying==false“的条件,然后中断循环。同样,当您想在按钮上启动线程时,单击,然后创建"isPlaying=true“并调用thread.start()方法。

代码语言:javascript
复制
public void run() {
   while(true) {
      if(!isPlaying) {
         break;
      }
      // Do other stuff here.
   }
}
票数 0
EN

Stack Overflow用户

发布于 2018-06-12 03:12:47

你可以用很多方法来做这件事

您可以使用以下命令获取所有正在运行的线程

代码语言:javascript
复制
Thread.getAllStackTraces()

您可以通过执行以下操作来“不安全地”停止线程

代码语言:javascript
复制
Thread t;
t.stop(); 
//or
t.destroy();
//or 
t.suspend();
//Or to resume
t.resume();

或者,您可以选择安全的路线,学习同步,并使用

代码语言:javascript
复制
Thread t;
t.wait();
t.notify();

此外,这并不总是有效的,但您可以这样做

代码语言:javascript
复制
 boolean pause() { isPaused = !isPaused; }

 @Override
 public void run() {
      while (running) { if (!isPaused) doThread(); }
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50804364

复制
相关文章

相似问题

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