gpt4 book ai didi

java 同步方法 - 它是如何工作的

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:02:37 26 4
gpt4 key购买 nike

我想我知道这一点,但希望得到证实。

显然 synchronized 会阻止其他线程访问它,但我看到了很多例子,例如

   public synchronized void setValue(int value)
{
balance=value;
}

我的想法是否正确,如果方法像上面那样只执行一行,那么同步就没有意义了。

谢谢

最佳答案

Am I right in thinking, that if the method only does one line like the above, then there is no point in it being synchronized.

没有。您似乎认为同步仅意味着原子性。

但它实际上提供的不止于此 - 特别是,它保证:

  • 原子性,这对单行分配没有用(除了下面的边界情况)
  • 知名度
  • 防止重新排序
  • 互斥:在同一个监视器上同步的2个方法不能同时运行

在您的示例中,如果没有同步,您无法保证如果一个线程调用您的方法并且另一个线程随后读取 balance,则第二个线程将看到更新后的值。

请注意,必须确保两端的可见性:写入和读取需要同步,使用相同的监视器。因此 getter getBalance 也需要同步。

边框大小写:double and long assignements are not guaranteed to be atomic .因此,即使在像下面这样的单行示例中,如果没有 synchronized 关键字,一个线程也可能更新 double 的前 32 位,而另一个线程更新后 32 位,从而创建一个新的混合平衡变量。

public synchronized void setValue(double value) {
balance = value;
}

关于java 同步方法 - 它是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14243790/

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