gpt4 book ai didi

java - 当方法仅在同步块(synchronized block)中调用时是否使方法同步是多余的?在操作系统层面会发生什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:30:30 24 4
gpt4 key购买 nike

假设您有一个方法 foo() 仅在同步块(synchronized block)中调用。

制作方法


同步无效 foo() {..}

相对于


无效的 foo() {..}

冗余或不良做法,还是它使方法的意图更清晰?在方法签名上使用 synchronized 关键字会使程序变慢吗?我想知道更好的做法是什么,或者我是否遗漏了全局的一部分。

谢谢。

最佳答案

通常,这意味着 foo() 本身不是原子操作,它可能不保留不变量,它只是更宏大的同步方案的一部分。

那么它应该声明synchronized,否则读者可能会产生错误的想法;而且它也有点慢。

相反,你可以

void foo()
{
assert Thread.holdsLock(this);
...
}

它有两个目的

  1. 记录此方法只能在外部 synchonized(this) block 中调用
  2. 在运行时检查该要求(我将为所有非生产运行启用断言)

关于java - 当方法仅在同步块(synchronized block)中调用时是否使方法同步是多余的?在操作系统层面会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14824116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com