[英]Java Start and Stop Threads
我无法弄清楚如何在Java
停止Thread
。
我有一个创建Thread
并启动它的function
。 现在,当我启动程序时,我希望它启动Thread
。 在那之后,如果按下button
,则我希望Thread
停止,当再次按下button
时,我希望Thread
重新开始或继续(没关系)。
我创建Thread
function
:
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();
}
还有我启动它并想要start/stop
Thread
。
//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;
}
}
});
线程将一直运行直到其run方法完成为止,因此,如果要继续运行它,请在run方法中添加一个无限循环,然后在run方法内部为“ isPlaying == false”添加一个条件,然后中断该循环。 要在按钮上启动线程时,再次单击,然后使“ isPlaying = true”并调用thread.start()方法。
public void run() {
while(true) {
if(!isPlaying) {
break;
}
// Do other stuff here.
}
}
您可以通过多种方式做到这一点
您可以使用以下命令获取所有正在运行的线程
Thread.getAllStackTraces()
您可以通过“不安全”地停止线程
Thread t;
t.stop();
//or
t.destroy();
//or
t.suspend();
//Or to resume
t.resume();
或者,您可以走安全路线,学习同步,然后使用
Thread t;
t.wait();
t.notify();
另外,此操作并非总是有效,但您可以做
boolean pause() { isPaused = !isPaused; }
@Override
public void run() {
while (running) { if (!isPaused) doThread(); }
}
对于将来可能会使用TarsosDSP
并TarsosDSP
相同问题的任何人,最简单的方法是创建一个全局dispatcher
dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);
并以此stop
Thread
:
dispatcher.stop();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.