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