【发布时间】:2012-06-12 11:08:31
【问题描述】:
此类扩展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) {
//...
}
}
}
}
它遵循Observer Pattern。这个类将订阅ConfigurationController
,每当任何配置参数发生变化时,它都会通过notifyConfiguration(...)
方法通知他。
让我对此有点不安全的是属性refresMS
。配置通过 GUI(线程#1)更改,并影响从该类的运行线程(线程#3)读取的Controller
类(线程#2)的属性。
Q1:这会成为竞争条件吗?
Q2:如果是,解决这个问题的最佳方法是什么?
【问题讨论】:
标签: java concurrency