java - if 语句中的compareAndSet。它是原子操作吗?

标签 java multithreading atomic

很明显compareAndSet是一个原子操作。但是下面的两个代码片段又如何呢?

if (value.compareAndSet(true, false)) // No negation

或者像这样:

if (!value.compareAndSet(true, false)) // There is a negation

我认为第一个操作是原子操作(但不太确定,因为有一个 if),第二个操作绝对不是原子操作,因为它由compareAndSet 和一个否定组成。

最佳答案

这段代码或多或少会编译为

boolean result = value.compareAndSet(true, false)
if (result){
// or
if (!result){

那个结果是一个局部变量(而且还是一个原语)。

其他线程无法访问它并且有人“破坏它”。

当然,下次您查看 AtomicBoolean 本身时可能会具有不同的值。但您仍然会知道 compareAndSet 是否成功。

关于java - if 语句中的compareAndSet。它是原子操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35597591/

相关文章:

java - 通过 ArrayList 扫描具有相同字段的对象

android - 从哪里开始线程服务?

casting - 转换任意类型以使用的安全性

c - 在这种情况下我真的需要互斥锁吗?

c++ - 如何使用 dlmopen 在不同线程中打开多个共享库?

concurrency - Clojure 删除 ref 内向量的第一个(或最后一个)元素

c++ - 操作可以重新排序到memory_order_release之前吗?

java - 在 httpSession 中存储扩展对象

java - Intellij 没有选择 mapstruct 生成的类

java - MongoDB:查询子文档:Java