java中的synchronized关键字只是语法糖吗?

时间:2011-12-04 14:12:53

标签: java syntax

  

可能重复:
  synchronized block vs synchronized method?

大家好,我想知道Snippet-A只是Snippet-B的语法糖吗? :

Snippet A:

public synchronized void F() {
    //..code
}

Snippet B:

public void F() {
    synchronized (this) {
        //..code
    }
}

或者更确切地说,上面两段代码之间究竟有什么区别?

1 个答案:

答案 0 :(得分:4)

两者完全相同。请参阅§8.4.3.6(JLS)的Java Language Specification

  

synchronized方法在执行之前获取监视器。   [...]   对于实例方法,   与this(方法所针对的对象)关联的监视器   使用了。

在JLS的示例中,这个:

synchronized void bump() { count++; }
据说

具有与此相同的效果:

void bump() {
    synchronized (this) {
        count++;
    }
}

并且您的两个F方法与示例bump方法非常相似。