无法输出4.0,如何才能输出

来源:3-2 线程安全性-原子性-atomic-2

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.0

0
3
car
回复
Jimin
多谢老师了,给我思路开阔了
2019-02-17
共3条回复

Jimin

2019-02-16

你好,你本地输出的是多少?或者你debug下,看看过程中那几次compareAndSet之后count都是什么值,看看哪次和注释的结果不一样了(注释里no代表的是没更新)
0
1
car
0.0
2019-02-16
共1条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程