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>

相关文章:

  • 2021-05-21
  • 2022-03-07
  • 2021-08-20
  • 2021-08-26
  • 2021-08-21
  • 2021-11-18
  • 2022-02-10
猜你喜欢
  • 2022-01-31
  • 2021-06-06
  • 2021-09-26
  • 2021-12-04
  • 2021-11-25
  • 2021-06-20
  • 2021-07-23
相关资源
相似解决方案