无法输出4.0,如何才能输出
来源:3-2 线程安全性-原子性-atomic-2
![](http://img1.sycdn.imooc.com/user/5397f36f00017a9c01000100-100-100.jpg)
car
2019-02-16
package com.mmall.concurrency.example.atomic;
import com.mmall.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.atomic.LongAdder;
@Slf4j
@ThreadSafe
public class AtomicExample4 {
private static AtomicReference<Double> count = new AtomicReference<>(0d);
public static void main(String[] args) {
count.compareAndSet(0d, 2d); // 2
count.compareAndSet(0d, 1d); // no
count.compareAndSet(1d, 3d); // no
count.compareAndSet(2d, 4d); // 4
count.compareAndSet(3d, 5d); // no
log.info("count:{}", count.get());
}
}
写回答
2回答
-
Jimin
2019-02-16
我刚才看错了,我以为你使用的课程里的例子。
你这里是改成了Double,这里是因为:Double a=0d Double b=0d,a==b其实返回的是false(你可以自己本地试一下),因此前两次compareAndSet其实并没有更新,后面几次就更无无法更新了,因此返回的结果是0.0032019-02-17 -
Jimin
2019-02-16
你好,你本地输出的是多少?或者你debug下,看看过程中那几次compareAndSet之后count都是什么值,看看哪次和注释的结果不一样了(注释里no代表的是没更新)012019-02-16
相似问题