这是相关的,但绝对不一样的,这个著名的SO问题:同步(这)和观察员通知
Avoid synchronized(this) in Java?
很多时候,我有一个“观察的主题”,喜欢它的通知观察员在修改时。该通知主要在做的“外国人法”调用(因为他们在有效的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()
方法?
这是下面的人反对synchronized(this)
建议的建议:
private final Object lock = new Object(); // shiny lock
public void updateDate(params) {
synchronized(lock) {
...
}
notifyObservers();
}
public Result getResult() {
synchronized(lock) {
return Result;
}
}
至于奖金问题,不保证它自己的SO问题:如果要推荐后者,有什么做谁建议不要使用人synchronized(this)想想Java中的方法可以声明为“synchronized”的事实吗?
请注意,如果在此观察者/通知情况下首选使用私人锁定,那么将代码切换到“私人锁定”成语绝对不会有问题:) – SyntaxT3rr0r 2011-04-13 12:34:22