【发布时间】:2012-01-12 15:16:36
【问题描述】:
大家好,我想知道 Snippet-A 只是 Snippet-B 的语法糖吗? :
片段A:
public synchronized void F() {
//..code
}
片段 B:
public void F() {
synchronized (this) {
//..code
}
}
或者说,上面两段代码到底有什么区别?
【问题讨论】:
大家好,我想知道 Snippet-A 只是 Snippet-B 的语法糖吗? :
片段A:
public synchronized void F() {
//..code
}
片段 B:
public void F() {
synchronized (this) {
//..code
}
}
或者说,上面两段代码到底有什么区别?
【问题讨论】:
两者是相同的。请参阅§8.4.3.6 的Java Language Specification (JLS):
synchronized方法在执行之前获取监视器。 [...] 对于实例方法, 与this关联的监视器(该方法所针对的对象 调用)被使用。
在 JLS 的示例中,这是:
synchronized void bump() { count++; }
据说效果和这个一样:
void bump() {
synchronized (this) {
count++;
}
}
您的两个F 方法与示例bump 方法非常相似。
【讨论】: