美文网首页
编程 || Atomic、CAS

编程 || Atomic、CAS

作者: 快语 | 来源:发表于2022-11-03 20:21 被阅读0次

    有很多Atomic开头的类,比如AtomicInteger等。它和Integer是不同的,不同就不同在并发的情况下,前者是线程安全的,后者不是。
    Atomic的安全来自哪里,来自它的CAS机制。
    什么是CAS,compare and swap,比较再替换。其实就是乐观锁机制,当我去替换这个值的时候,我先检查一下这个是不是我认为它该有的状态。
    比如AtomicInteger的值原本是1,那么线程a对它加1,那么结果应该是2。在将2复制给变量的时候,会判断它的现值是不是1,如果其他线程对它改动过了,那么它的现值必然就不是1。
    AtomicInteger还会有个隐藏的问题叫ABA,就是现值虽然和期望的一样,但是可能是经过一番波折后才变成一样的。这时候就看业务上是否讲究了。

    那Atomic的好处是什么呢?
    它可以避免线程的切换,线程切换是一件成本很高的事儿。但是,也看场景。Atomic就像个愣头青一样,线程阻塞后就拼命地去改改改,但是如果一直没有达到运行条件,那么就会无限循环耗尽CPU,这同样也是一件成本很高的事儿。
    所以,要tradeoff。

    相关文章

      网友评论

          本文标题:编程 || Atomic、CAS

          本文链接:https://www.haomeiwen.com/subject/cwbetdtx.html