已同步(this)和观察者通知
|
这与这个著名的SO问题相关但绝对不相同:
避免在Java中同步(this)?
通常,我有一个“可观察的主题”,它喜欢在修改后通知其观察者。通知基本上是在进行“外来方法”调用(因为它们在有效Java中被调用等),我可能会有类似这样的内容:
public void updateData(params) {
synchronized (this) {
// do some computation here
}
notifyObservers(); // Never, EVER, call an alien method with a lock held (see Effective Java)
}
public synchronized Result getResult() {
...
}
我是否应该避开synchronized(this)
,同时从getResult()
方法中删除ѭ2??
建议反对“ 1”字的人推荐以下内容:
private final Object lock = new Object(); // shiny lock
public void updateDate(params) {
synchronized( lock ) {
...
}
notifyObservers();
}
public Result getResult() {
synchronized( lock ) {
return Result;
}
}
作为一个额外的问题,它并不能保证它是自己的SO问题:如果建议使用后者,那么建议不使用synced(this)的人们会想到以下事实:Java中的方法可以声明为“ synchronized” \“?
没有找到相关结果
已邀请:
1 个回复
拟蓬