如何在Java中完全停止线程?

时间:2015-07-10 18:08:43

标签: java android multithreading

我知道这个问题之前被问过很多次。 我不想在Run()方法中添加标记。因为该方法仍然运行并耗尽电池。 如何完全停止线程?!

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_layout);

    AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);
    dispatcher.addAudioProcessor(new PitchProcessor(PitchEstimationAlgorithm.AMDF, 22050, 1024, new PitchDetectionHandler() {

        @Override
        public void handlePitch(PitchDetectionResult pitchDetectionResult,
                AudioEvent audioEvent) {
            final float pitchInHz = pitchDetectionResult.getPitch();
            runOnUiThread(new Runnable() {
                 @Override
                 public void run() {

                    Log.i("" + pitchInHz);

                }
            });

        }
    }));

    Thread thread = new Thread(dispatcher,"Audio Dispatcher");
    thread.start();

}

2 个答案:

答案 0 :(得分:1)

非常肯定这对你来说不再重要,但对于未来可能会使用TarsosDSP且面临同样问题的人来说,最简单的方法就是建立全球dispatcher

dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);

只需stop Thread即可:

dispatcher.stop();

答案 1 :(得分:0)

Thread myThread =....
myThread.stop();

免责声明:此方法已被弃用,因此我可能厌倦了使用它,但它确实是一种停止线程的野蛮方式。除此之外,使用易变的旗帜是我唯一的想法。

请注意,使用myThread.stop()方法将立即抛出必须捕获的ThreadDeath异常。它还将导致释放线程所需的所有锁。

编辑:您也可以从main方法调用Thread.interrupt()来设置内部中断状态标志。 (线程将使用Thread.interrupted()轮询该标志,如果线程被中断并清除状态标志,则该标志将返回true