• synchronized、原子锁


    synchronized   悲观   阻塞式,冲突多,     先锁后更新

    原子变量         乐观   非阻塞,冲突少,  CAS更新(冲突检测=>冲突,继续尝试)

    性能synchronized<原子变量

     乐观

          原子变量 简单

                          复杂如下:
         ConcurrentLinkedQueue和ConcurrentLinkedDeque:非阻塞并发队列
         ConcurrentSkipListMap和ConcurrentSkipListSet:非阻塞并发Map和Set

    synchronized锁相比,这种原子更新方式代表一种不同的思维方式。

    synchronized是悲观的,它假定更新很可能冲突,所以先获取锁,得到锁后才更新。原子变量的更新逻辑是乐观的,它假定冲突比较少,但使用CAS更新,也就是进行冲突检测,如果确实冲突了,那也没关系,继续尝试就好了。

    synchronized代表一种阻塞式算法,得不到锁的时候,进入锁等待队列,等待其他线程唤醒,有上下文切换开销。原子变量的更新逻辑是非阻塞式的,更新冲突的时候,它就重试,不会阻塞,不会有上下文切换开销。

    对于大部分比较简单的操作,无论是在低并发还是高并发情况下,这种乐观非阻塞方式的性能都要远高于悲观阻塞式方式。

    原子变量是比较简单的,但对于复杂一些的数据结构和算法,非阻塞方式往往难于实现和理解,幸运的是,Java并发包中已经提供了一些非阻塞容器,我们只需要会使用就可以了,比如:

    ConcurrentLinkedQueue和ConcurrentLinkedDeque:非阻塞并发队列
    ConcurrentSkipListMap和ConcurrentSkipListSet:非阻塞并发Map和Set

  • 相关阅读:
    HTTPS证书撤销
    前端跨域问题解析
    js递归遍历key
    阿里云centos配置nginx和nodejs
    Linux 查看服务器配置
    解决IPOD NANO7无法开机
    GIF添加3D加速
    关于bootstrap Modal弹窗 滚动条的问题
    Just-In-Time Debugging in Visual Studio 禁止VS在服务器上调试
    利用ASP.NET操作IIS (可以制作安装程序)
  • 原文地址:https://www.cnblogs.com/smallfa/p/13064643.html
Copyright © 2020-2023  润新知