gpt4 book ai didi

java - 易变和同步

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:45:38 24 4
gpt4 key购买 nike

关于 synchronized 和 volatile,我还有些不明白。

我了解线程可以在本地安全更改。到目前为止,我读到的是 synchronized > volatile。

假设我有一个参数不是 long 或 double 所以基本上是一个标准的整数(没有原子)。

我有一个同步方法,我用这个整数做了很多工作。所有线程都会得到这个 Integer 的更新版本吗?或者我是否也必须将其声明为 volatile?

public class stackoverflow {

private int x = 0;

public synchronized void rechnen(){
//dosomething
}
}

基本上在 rechnen() 完成后,我有 10000 个线程,所有线程都会得到 x 的更新版本,因为我的方法是同步的吗?还是我也必须将其声明为 volatile?

最佳答案

是的,他们将获得更新版本。 synchronized 保证两件事:更改的可见性和原子性。 volatile 只是保证变化的可见性。 Java 保证 synchronized block 内的代码不会被优化(通过混合 synchronized block 内部和外部的命令),因此在 synchronized block 结束后,其中变量的每次更改都将对所有线程可见。

关于java - 易变和同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34527707/

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