Java TimerTask 未更新静态字段

Java TimerTask not updating static field

您好,我有这个自定义 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" 消息,我在没有创建 Custom TimerTask 的情况下使用 AtomicBoolean 进行了尝试,但结果相同。

提前致谢,

TimerTask 的 运行 方法启动时,i 将为 false。然后设置为true。但是休眠 3 秒后,i 再次设置为 false

在下一个 运行 期间,i 将作为 false 开始。这样下去..

您必须删除对 i 的最后一次分配,使其在第一个 运行 之后变为 true。这样,它将在随后的 运行 上打印 m here

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

false
ok
bye
true
m here
true
m here

请仔细阅读这些以获取有关静态变量的更多信息:static variables in multithreading and this also Are static variables shared between threads?