gpt4 book ai didi

Java TimerTask 不更新静态字段

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:19 24 4
gpt4 key购买 nike

您好,我有这个自定义 TimerTask :

public class TimerTaskPerso extends TimerTask {
private static boolean i = false;
@Override
public void run() {
System.out.println(i);
if(i){
System.out.println("m here");
return;
}
i= true;
System.out.println("ok");

try {
Thread.sleep(3000);
} catch (InterruptedException ignored) {

}
System.out.println("bye");
i= false;
}
}

我这样调用它:

new Timer().schedule(new TimerTaskPerso(), 1,500);

但是任务一直显示:

false
ok
bye
false
ok
false

我应该看到“m here”消息,我在没有创建自定义 TimerTask 的情况下尝试了此操作并使用 AtomicBoolean 但结果相同。

提前致谢,

最佳答案

为什么你认为它会打印“m here”作为输出。您正在再次设置i=false。所以它不会打印该消息。为了打印该消息,您应该注释此行i= false;。注释掉这一行后,我的 IDE 中的输出为:

false
ok
bye
true
m here
true
m here

请仔细阅读以下内容以获取有关静态变量的更多信息:static variables in multithreading这也是 Are static variables shared between threads?

关于Java TimerTask 不更新静态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59539514/

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