首页 > 编程语言 > 详细

01 多线程核心原理

时间:2019-10-11 13:35:06      阅读:86      评论:0      收藏:0      [点我收藏+]

多线程核心原理

  1. 多线程的作用

    充分利用CPU资源,提高执行效率

    CPU底层使用的是:总线锁和缓存锁(缓存一致性协议)
  2. 多线程带来的问题

    • 可见性问题

      • 解决方法
        volatile修饰全局变量(hsdis插件查看运行时的汇编指令)
      • 原理:使用lock指令
        • 把当前处理器缓存行的数据写入到系统内存
        • 写回内存的操作会让其他CPU里缓存了该内存地址的数据无效
    • 原子性问题

      • 解决方法

        synchronized,lock,atomic
  3. 加锁带来的性能问题解决方法

    • 控制锁的粒度
      • 对象锁和类锁
    • 锁本身进行优化(在性能和安全性之间做一个平衡)
      • 无锁-》轻量级锁-》偏向锁-》重量级锁
        • 在绝大部分情况下,线程不仅仅不存在竞争,并且是由同一个线程获得

          无锁,使用CAS(共享标识)保证原子性

          boolean rs=CompareAndSet(obj,offset(某个属性在内存中的偏移量),expect(预期值),update(更新后的值))
        • 如果更新失败,升级为轻量级锁

          进入自旋(目的:获取锁,霸占CPU,减少线程的切换)

          ```
          for(;;){//限定次数

          }
          ```
        • 如果竞争非常激烈,升级为重量级锁(队列)

01 多线程核心原理

原文:https://www.cnblogs.com/lifeone/p/11653105.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!