【发布时间】:2018-02-26 23:36:00
【问题描述】:
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 被调用了两次。
【问题讨论】:
-
您能否分享您正在运行以产生您描述的问题的示例代码?
-
对不起,我不明白,你是想调用具有外部类作为变量的线程还是具有外部类变量的线程或调用外部类的线程
标签: java multithreading inner-classes outer-classes