并发之前四章关键点

并发1

并发编程的挑战

  • 上下文切换

    • 无锁编程
    • cas算法
    • 使用最少线程
    • 协程
  • 死锁

    • 死锁产生的必要条件
      • 互斥
      • 请求与保持
      • 不可剥夺
      • 循环等待
  • 资源限制

重点的关键字

  • volatile
    • 保障了共享变量的可见性
    • 会生成一个Lock前缀的指令
      • 当前缓冲行写会主内存
      • 令其他处理器的对应该地址的缓冲行失效
    • 缓存一致性协议
      • MESI协议
  • synchronized
    • 每个对象都可以作为锁
      • 普通同步方法,锁的是当前实例对象
      • 静态同步方法,锁的是当前类的Class对象
      • 同步方法块,锁的是括号里的配置的对象
    • 通过monitor进入和退出来实现锁的功能
    • 四种锁
      • 无锁
      • 偏向锁
      • 轻量级锁
      • 重量级锁
    • ⭐锁升级
      • 阐述明白一个锁升级的流程
  • CAS
    • 循环cas实现原子操作
    • 三个问题
      • ABA问题
        • 使用版本号
      • 循环时间长开销大
      • 只能保证一个共享变量的原子操作
  • 保证复杂内存操作原子性
    • 总线锁
    • 缓存锁
  • AQS

Java内存模型

并发编程的两个关键问题

  • 线程之间如何通信
  • 线程之间如何同步

通信机制

  • 共享内存
  • 消息传递

Java的并发采用共享内存模型

image-20210227141647810

重排序问题

  • 目的:提供性能
  • 编译器和处理器
    • 编译器优化重排序
    • 指令集并行的重排序
    • 内存系统的重排序

内存屏障

volatile

特性

  • 可见性
    • 对一个volatile变量的对,总能看到对这个volatile变量最后的写入
  • 原子性
    • 对任意单个volatile变量的读/写是具有原子性的,但是复合操作不具备原子性

对应的内存语义有所认知

⭐单例模式

  • 几种代码实现都要能实现

相关链接
https://blog.csdn.net/weixin_44577413/article/details/114183013
https://blog.csdn.net/weixin_44577413/article/details/114183797

posted @ 2021-02-28 02:31  八佰山兵上北坡  阅读(45)  评论(0编辑  收藏  举报