gpt4 book ai didi

java - 关于引用类型的 Java volatile 关键字的问题

转载 作者:搜寻专家 更新时间:2023-11-01 02:32:18 24 4
gpt4 key购买 nike

我理解 Java 中的 volatile 关键字可以使引用变量和除 long 和 double 之外的所有原语的读/写操作具有原子性。

我还知道诸如递增整数、var++ 之类的复合语句不是原子的,不应该用来代替同步语句。

但是这个类呢?

public class Setter{

private int num = 0;

public int setNum(int numIn){
num = numIn;
return num;
}
}

现在假设您将 Setter 的实例声明为 volatile。

public class Main {
private volatile Setter s;

public static void main(String[] args){
s = new Setter();
s.setNum(5);
}
}

方法 setNum 的调用是原子的吗?如果多个线程同时调用这个语句,每个线程都有不同的值,这个语句是否安全?

以正确方式使用 volatile 类并在不安全的复合语句中使用它的示例是什么?

最佳答案

Is a call to the method setNum atomic?

不,不是。只有对 s 的读/写才是易变的。

这可以与让 List 成为 final 进行比较。这不足以使列表不可变,只有列表引用本身。

关于java - 关于引用类型的 Java volatile 关键字的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6237296/

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