java - 同步访问的方法是否应该同步?

标签 java concurrency synchronized synchronized-block

我想从 synchronized block 中访问方法。这是一个例子:

public void doSomething() {
    // simple stuff

    // a block to reduce the synchronized code to
    // what really needs to be synchronized.
    synchronized(this) {
        if (precondition) {
            doSequentialStuff();
        }
    }
}

private void doSequentialStuff() {
    // do stuff needs to be performed sequentially.
}

为了编写干净的代码,我想知道使方法 doSequentialStuff 显式synchronized 是否会更好。恕我直言,这在语义上没有什么区别,因为在这两种情况下锁都是 this 并且保证只能从 synchronized block 访问该方法。我希望增加可读性。

有什么建议吗?

编辑: 我修改了示例以合并注释。

最佳答案

如果没有合法的代码路径可以在不持有锁的情况下执行doHeavyStuff,那么无论如何使其同步为了预防粗心的开发人员将来引入的任何错误。代码的可读性只能通过什么方式来提高。

关于java - 同步访问的方法是否应该同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14121059/

相关文章:

java - 聚合函数 MAX 和 AVG 不适用于 Hibernate HQL 中的 DATEDIFF

java - 最小二乘法 3D

java - java.util.Optional<T> 映射函数是线程安全的吗?如果是,我该如何测试?

c++ - 使用 memory_order_relaxed 进行存储,使用 memory_order_acquire 进行加载

java - 预订应用程序中的同步

java - TCP 客户端/服务器程序,DataInputStream/DataOutputStream 问题

java - 类可以作为方法的参数吗?

php - Symfony 2 阻塞并发

java - 如果你锁定了一个对象,你是否锁定了它的所有方法?

java - 线程如何能够访问应该是 block 的同步块(synchronized block)?