我可以更改上面代码中定义的 run() 方法中的变量吗?
boolean flag = false;
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
flag = true; // error
logger.info("flag changed");
}
};
timer.schedule(task, 30_000);
while(true) {
if(flag) break;
...
}
以下解决方案有效:
AtomicBoolean flag = new AtomicBoolean(); //initial value false
Timer timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
flag.set(true);
}
};
timer.schedule(task, 30_000);
while(!flag.get()) {
...
}