首页 > 解决方案 > 这三种同步是等价的吗?

问题描述

这个:

private final Object lock = new Object();

public void doSomething() {
    synchronized (lock) {
        // do something
    }
}

与这个:

public void doSomething() {
    synchronized (this) {
        // do something
    }
}

与这个:

public synchronized void doSomething() {
        // do something
}

这是一个很棒的教程,它解释了不同的同步方式。

在为我阅读之后,您在代码中应用哪一个似乎只是一个品味问题,因为所有这些都有相同的结果,即:一次只有一个线程可以do something。你能证实这一点吗?

我在 SO 上阅读了许多关于 Java 同步的线程,但是其中大多数都没有一般性地讨论它,而是针对给定的代码片段讨论它的特定方面。

我想开始的只是确保所有三个基本相同,我没有弄错基础知识,然后我可以继续了解更多关于性能方面的细微差异等等上...

标签: javasynchronizationthread-synchronization

解决方案


推荐阅读