Java TimerTask未更新静态字段

问题描述 投票:0回答:1

你好,我有这个自定义的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

我应该看到“在这里”消息,我没有创建Custom TimerTask并使用AtomicBoolean进行了尝试,但结果相同。]

谢谢,

你好,我有这个自定义的TimerTask:公共类TimerTaskPerso扩展了TimerTask {private static boolean i = false; @Override public void run(){System.out.println(i); if(i){...

java timer static synchronization timertask
1个回答
0
投票

TimerTask的运行方法启动时,i将为false


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.