加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

01 多线程核心原理

发布时间:2020-12-15 07:25:49 所属栏目:Java 来源:网络整理
导读:多线程核心原理 多线程的作用 充分利用CPU资源,提高执行效率 CPU底层使用的是:总线锁和缓存锁(缓存一致性协议) 多线程带来的问题 可见性 问题 解决方法 volatile 修饰全局变量(hsdis插件查看运行时的汇编指令) 原理:使用lock指令 把当前处理器缓存行的数

多线程核心原理

  1. 多线程的作用

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

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

    • 可见性问题

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

      • 解决方法

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

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

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读