多线程核心原理

  1. 多线程的作用

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

CPU底层使用的是:总线锁和缓存锁(缓存一致性协议)
2. ## 多线程带来的问题
- ### 可见性问题
- 解决方法
volatile修饰全局变量(hsdis插件查看运行时的汇编指令)
- 原理:使用lock指令
- 把当前处理器缓存行的数据写入到系统内存
- 写回内存的操作会让其他CPU里缓存了该内存地址的数据无效
- ### 原子性问题
- 解决方法

synchronized,lock,atomic
3. ## 加锁带来的性能问题解决方法
- 控制锁的粒度
- 对象锁和类锁
- 对锁本身进行优化(在性能和安全性之间做一个平衡)
- 无锁-》轻量级锁-》偏向锁-》重量级锁
- 在绝大部分情况下,线程不仅仅不存在竞争,并且是由同一个线程获得

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

boolean rs=CompareAndSet(obj,offset(某个属性在内存中的偏移量),expect(预期值),update(更新后的值))

- 如果更新失败,升级为轻量级锁

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

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

            }
            ```
        - 如果竞争非常激烈,升级为<font color=red>重量级锁(队列)</font>
posted on 2019-10-11 11:28  YL10000  阅读(174)  评论(0编辑  收藏  举报