美文网首页
java多线程(三)原子操作CAS

java多线程(三)原子操作CAS

作者: 7ColorLotus | 来源:发表于2020-05-22 23:27 被阅读0次
    • CAS(Compare And Swap)

      1. 什么是原子操作?如何实现原子操作

      2. CAS的原理:利用了现代处理器都支持的CAS指令,循环这个指令,直到成功为止
        利用现代处理器都支持CAS,指令级别保证这是一个原子操作
        三个运算符:一个内存地址V,一个期望值A,一个新值B
        基本思路:如果地址V上的值和期望的值A相等,就给这个地址赋给一个新值B;如果期望值不是A,不做任何操作。
        在一个循环(死循环,自旋)里不断的进行CAS操作

      3. CAS的问题
        ABA问题:A--->B--->A 版本号:A1--->B2--->A3
        开销问题:CAS操作长期不成功,CPU不断的循环
        只能保证一个共享变量的原子操作,如果有保证多个共享变量的需求,实现方法是将两个变量封装成一个对象

    • Synchronized是基于阻塞的锁机制

      1. 被阻塞的线程优先级很高
      2. 拿到锁的线程一直不释放锁怎么办
      3. 大量线程竞争热点资源,会消耗CPU,同时会带来死锁或其他安全问题
    • 原子操作类的使用

      1. 原子更新基本类型类:AtomicBoolean,AtomicInteger,AtomicLong
      2. 原子更新数组类:AtomicIntegerArray,AtomicLongArray,AtomicReferenceArray
      3. 原子更新引用类:AtomicReference,AtomicMarkableReference,AtomicStampedReference
      4. 原子更新字段类:AtomicRerenceFieldUpdater,AtomicIntegerFieldUpdater,AtomicLongFiedUpdater
    • AtomicMarkableReference和AtomicStampleReference解决ABA问题
      AtomicMarkableReference boolean有没有动过
      AtomicStampedReference 动过几次

    相关文章

      网友评论

          本文标题:java多线程(三)原子操作CAS

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