public class Status {
private Scheduler scheduler;
private volatile Boolean lastResult;
public Status() {
scheduler = new Scheduler();
scheduler.everyTenSeconds(new Action());
}
public boolean isSth() {
if (lastResult != null && lastResult) {
return lastResult;
} else {
return checkSth();
}
}
private boolean checkSth() throws SomeException {
// checking sth
}
private class Action implements Runnable {
@Override
public void run() {
try {
lastResult = checkSth();
} catch (SomeException e) {
lastResult = false;
}
}
}
}
调用外部类变量是线程安全的吗?最后一个结果是 lastResult 但在调用 isSth() 时 lastResult 始终为空。尽管 run 被调用了两次。