此类扩展Thread
,一旦创建,线程就会启动。这是代码:
class Controller extends Thread implements ConfigurationObserver{
private int refreshMS;
//...
@Override
public void notifyConfiguration(ConfigurationModel config) {
refreshMS = config.getRefreshMs();
}
@Override
public void run() {
//...
while (true) {
try {
Thread.sleep(refreshMS);
} catch (InterruptedException ex) {
//...
}
}
}
}
它遵循观察者模式。这个类将订阅它自己,ConfigurationController
每当任何配置参数发生变化时,都会通过notifyConfiguration(...)
方法通知他。
让我对此有点不安全的是属性refresMS
。配置通过 GUI (Thread #1) 更改,并影响从Controller
该类的运行线程 (Thread #3) 读取的类 (Thread #2) 的属性。
Q1:这会成为比赛条件吗?
Q2:如果是这样,解决这个问题的最佳方法是什么?