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

发布于 2024-12-19 22:43:25 字数 481 浏览 1 评论 0原文

可能的重复:
同步块与同步方法?

嗨,我只是想知道 Snippet-A 只是一种语法片段-B 的糖? :

Snippet A:

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

Snippet B:

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

或者更确切地说,上面两段代码到底有什么区别?

Possible Duplicate:
synchronized block vs synchronized method?

Hi all I was wondering is Snippet-A simply a syntax sugar for Snippet-B? :

Snippet A:

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

Snippet B:

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

Or rather, what exactly is the difference between the two pieces of code above?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

总以为 2024-12-26 22:43:25

两者是相同的。请参阅§8.4.3.6 Java 语言规范 (JLS):

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

在 JLS 的示例中,

synchronized void bump() { count++; }

据说 this: 与 this: 具有相同的效果,

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

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

The two are identical. See §8.4.3.6 of the Java Language Specification (JLS):

A synchronized method acquires a monitor before it executes.
[...]
For an instance method, the
monitor associated with this (the object for which the method was
invoked) is used.

In the example in the JLS, this:

synchronized void bump() { count++; }

is said to have the same effect as this:

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

and your two F methods are very similar to the example bump methods.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文