Java并发编程的艺术 笔记

并发编程的挑战

上下文切换

定义:
Java并发编程的艺术 笔记
如何减少上下文切换:
Java并发编程的艺术 笔记

死锁

产生死锁的四个必要条件

  1. 互斥条件:一个资源每次只能被一个进程使用。 (资源本身的特点,不可避免)
  2. 请求与保持条件:一个进程因请求资源而等待时,不会释放已分配的资源。
  3. 不剥夺条件:进程已获得的资源,在未使用之前,不能被强行剥夺。
  4. 循环等待条件:若干个进程之间形成头尾相连的循环等待资源的关系。

只要产生死锁,这四个条件必定成立,若破坏其中一个条件,死锁就不会发生了。

如何避免死锁:

  1. 打破互斥条件:允许进程同时访问资源(有些资源就是不可以同时访问的,无实用价值)
  2. 打破不可抢占条件:比如给进程设置优先级,高优先级的可以抢占资源(实现困难,降低系统性能)
  3. 打破占有且等待条件:实行资源预分配策略,即进程在运行前一次性的向系统申请它所需要的全部资源(不可预测资源的使用,利用率低,降低并发性)
  4. 破坏循环等待条件:采用这种策略,即把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。所有进程对资源的请求必须严格按资源序号递增的顺序提出(限制和编号实现困难,增加系统开销,有些资源暂时不用也需要先申请,增加了进程对资源的占用时间)

资源限制的挑战

什么是资源限制:
Java并发编程的艺术 笔记
在资源限制下编程
Java并发编程的艺术 笔记

Java并发机制的底层实现原理

valatile

Java并发编程的艺术 笔记

synchronized

synchronized用的锁存在对象头中。
Java并发编程的艺术 笔记
Java并发编程的艺术 笔记
Java并发编程的艺术 笔记
Java并发编程的艺术 笔记

参考:https://blog.****.net/tongdanping/article/details/79647337
https://tech.meituan.com/2018/11/15/java-lock.html