美文网首页
CAS和Synchronized适用场景

CAS和Synchronized适用场景

作者: 王金松 | 来源:发表于2019-04-02 13:09 被阅读0次
    • 对于资源竞争较少的情况,使用Aynchronized同步锁进行线程阻塞和唤醒以及内核的切换操作会额外消耗CPU,而CAS基于硬件实现,不需要进入内核,不需要切换线程,操作自旋几率较少,可以获得更好的性能
    • 对于资源竞争严重的情况,CAS自旋的概率会比较大,从而浪费更多的CPU资源
      比如AtomicInteger的getAndIncrement()操作
    public final int getAndIncrement() {
      for (;;) {
        int current = get();
        int next = current + 1;
        if (compareAndSet(current, next)) {
          return next
        }
      }
    }
    

    如果compareAndSet()方法陈宫执行,则直接返回;如果线程之间竞争激烈,导致compareAndSet()一直不成功,则会一直循环等待,直到好近cpu分配给该线程的时间片,从而大幅度降低效率

    • 总结
    1. 使用CAS在线程冲突严重的情况下,会大幅降低程序性能,CAS只适用于线程冲突较少的情况下使用
    2. synchronized在jdk1.6之后,依靠Lock-Free,基本思路是自旋后阻塞,在线程冲突较少的情况下,可以获得和CAS类似的性能,而线程冲突严重的情况下,性能远高于CAS

    相关文章

      网友评论

          本文标题:CAS和Synchronized适用场景

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