gpt4 book ai didi

java - 为什么线程被多次创建?

转载 作者:行者123 更新时间:2023-11-29 05:41:17 25 4
gpt4 key购买 nike

我使用以下方法来运行连续线程:

public void createAndStartCountDownThread(){
final Handler handler = new Handler();


countDownThread=new Thread(new Runnable() {
public void run() {
int timeToBlink = 1000;
try{Thread.sleep(timeToBlink);}catch (Exception e) {}
handler.post(new Runnable() {
public void run() {
if(isCountDownThreadRunning==0)
return;
if(secondsUntilFinished!=0)
secondsUntilFinished--;

if(secondsUntilFinished==0)
onFinish();
else{

createAndStartCountDownThread();

}
}
});

}
});

countDownThread.start();

}

基本上,所有这一切都是为计时器倒计时。然而,问题是,如果我过于频繁地调用此方法,似乎会创建此线程的多个副本,因为计时器开始以两倍或三倍的速度移动。我不明白为什么会发生这种情况 - 似乎我正在重新分配现有的 countDownThread,因此不应生成新的。我做错了什么?

最佳答案

处理程序中的运行函数调用 createAndStartCountDownThread(),它创建一个新线程并在其上调用启动。所以每个线程都会向处理程序发送一些内容,这将创建一个新线程。所以是的,这个函数会产生很多线程。

我不确定您要做什么,但这是错误的方法。如果您想要计时器,请使用计时器或闹钟。如果你想创建一个连续的线程,你需要一个带有循环的线程(这样线程就不会退出运行并过早终止)。如果你想晚点被唤醒(晚点真的很快),只需使用 Handler。

编辑:

如果您正在尝试实现闪烁行为,我建议您只使用一个处理程序,并通过 postMessageDelayed 向其发送一条消息。这将在指定的时间内运行可运行的处理程序。不涉及任何线程,一切都在 UI 线程上,因此您可以从中更改您的 UI。

关于java - 为什么线程被多次创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17477653/

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