大家好,我想知道Snippet-A只是Snippet-B的语法糖吗? :
Snippet A:
public synchronized void F() {
//..code
}
Snippet B:
public void F() {
synchronized (this) {
//..code
}
}
或者更确切地说,上面两段代码之间究竟有什么区别?
答案 0 :(得分:4)
两者完全相同。请参阅§8.4.3.6(JLS)的Java Language Specification:
synchronized
方法在执行之前获取监视器。 [...] 对于实例方法, 与this
(方法所针对的对象)关联的监视器 使用了。
在JLS的示例中,这个:
synchronized void bump() { count++; }
据说具有与此相同的效果:
void bump() {
synchronized (this) {
count++;
}
}
并且您的两个F
方法与示例bump
方法非常相似。