gpt4 book ai didi

java - AtomicInteger set方法是Atomic的吗?

转载 作者:行者123 更新时间:2023-11-30 06:11:42 40 4
gpt4 key购买 nike

为什么在AtomicInteger或另一个Atomic类中定义了这个set方法?

示例代码:

 /**
* Sets to the given value.
*
* @param newValue the new value
*/
public final void set(int newValue) {
value = newValue;
}

/**
* Sets to the given value.
*
* @param newValue the new value
*/
public final void set(V newValue) {
value = newValue;
}

这个方法不是注释atomic?这个set()方法意味着他还不是原子的?

我不明白为什么在 AtomicInteger 或另一个 Atomic(例如:AtomicReference)中没有原子方法?谢谢!

最佳答案

对变量的写入或读取本身就是一个原子操作 - 除了 longdouble 之外(请参阅 JLS §17.7 )。

此外,value 字段被声明为 volatile ,这使得获取和设置值是线程安全的,因为“Java 内存模型确保所有线程都看到一致的值”。变量的值”(参见 JLS §8.3.1.4 )。此外,在处理 volatile 变量时,还存在发生之前关系(请参阅 JLS §17.4.5 )。

这意味着方法getset本身就是原子操作,没有任何进一步的同步机制。其他操作 - 例如 getAndSetcompareAndSet - 必须使用一些进一步的同步机制来确保原子性。

关于java - AtomicInteger set方法是Atomic的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50095501/

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