gpt4 book ai didi

java - 如何停止线程?

转载 作者:行者123 更新时间:2023-12-02 13:22:54 26 4
gpt4 key购买 nike

我在应用程序的 onCreate() 方法中启动一个新线程,如下所示:

stepsLogger = new Runnable() { 

while(!Thread.currentThread().isInterrupted()){

//my code

try {
Thread.currentThread().sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};

loggerThread = new Thread(stepsLogger);
loggerThread.start();

虽然它不会被中断,但它应该每 10 秒执行一次操作。

我在 Runnable 的开头记录一些文本,以查看代码运行的频率。我第一次运行应用程序时一切正常,但每次重新启动时,文本都会更频繁地记录,这意味着更多线程正在运行。

我尝试在 onDestroy() 方法中阻止它们:

@Override
protected void onDestroy() {
super.onDestroy();
loggerThread.interrupt();
loggerThread = null;
}

如何确保应用程序重新启动时旧线程停止?

最佳答案

Thread.interrupt() 将通过 InterruptedException 唤醒正在 sleep 的线程,因此您已经完成了大部分工作。我将通过以下方式更改您的循环:

while (true) {
// some code
try {
Thread.currentThread().sleep(10000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // restore the thread's interrupted flag
break;
}
}

关于重新中断线程的部分很微妙。您可以在主要 JVM 架构师之一的这篇文章中阅读更多相关信息:https://www.ibm.com/developerworks/library/j-jtp05236/

如果此链接死亡,其要点是可以有多个线程中断“接收者”。捕获异常会隐式清除线程的中断标志,因此再次设置它很有用。

关于java - 如何停止线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43502799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com