gpt4 book ai didi

java - 方法调用和原子性

转载 作者:行者123 更新时间:2023-12-02 08:13:39 24 4
gpt4 key购买 nike

我有一个具有单个原子操作的方法,就像这样

int value;

public void setValue(int value) {
this.value = value;
}

然后我以明显的方式调用它,例如

foo.setValue(10);

问题是:这是原子操作吗?如果不是,将执行哪些原子操作?我如何在我的计算机上测试这个(如果可以的话)?

最佳答案

是的

this.value = value;

操作是原子的。请参阅Java Language Specification: Threads and Locks .

请注意,虽然线程可以缓存它们自己的非 volatile 变量的值,所以保证连续的get-操作将产生最后设置

要消除此类数据争用,您需要以某种方式同步对变量的访问。这可以通过

来完成
  • 使方法同步,
  • 让变量具有 volatile ,或者,
  • 使用 AtomicInteger 来自java.util.concurrent包裹。 (我认为是首选方式)
<小时/>

还应该注意的是,如果您从 int 更改,该操作将不是是原子的。至longdouble 。以下是 JLS 的相关部分:

17.4 Non-atomic Treatment of double and long

If a double or long variable is not declared volatile, then for the purposes of load, store, read, and write actions they are treated as if they were two variables of 32 bits each: wherever the rules require one of these actions, two such actions are performed, one for each 32-bit half.

<小时/>

一些有用的链接:

关于java - 方法调用和原子性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4925441/

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