Java并发编程的艺术 笔记
并发编程的挑战
上下文切换
定义:
如何减少上下文切换:
死锁
产生死锁的四个必要条件
- 互斥条件:一个资源每次只能被一个进程使用。 (资源本身的特点,不可避免)
- 请求与保持条件:一个进程因请求资源而等待时,不会释放已分配的资源。
- 不剥夺条件:进程已获得的资源,在未使用之前,不能被强行剥夺。
- 循环等待条件:若干个进程之间形成头尾相连的循环等待资源的关系。
只要产生死锁,这四个条件必定成立,若破坏其中一个条件,死锁就不会发生了。
如何避免死锁:
- 打破互斥条件:允许进程同时访问资源(有些资源就是不可以同时访问的,无实用价值)
- 打破不可抢占条件:比如给进程设置优先级,高优先级的可以抢占资源(实现困难,降低系统性能)
- 打破占有且等待条件:实行资源预分配策略,即进程在运行前一次性的向系统申请它所需要的全部资源(不可预测资源的使用,利用率低,降低并发性)
- 破坏循环等待条件:采用这种策略,即把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。所有进程对资源的请求必须严格按资源序号递增的顺序提出(限制和编号实现困难,增加系统开销,有些资源暂时不用也需要先申请,增加了进程对资源的占用时间)
资源限制的挑战
什么是资源限制:
在资源限制下编程
Java并发机制的底层实现原理
valatile
synchronized
synchronized用的锁存在对象头中。
参考:https://blog.****.net/tongdanping/article/details/79647337
https://tech.meituan.com/2018/11/15/java-lock.html