什么是死锁?
当多个线程持有不同的资源,并且互相等待对方释放资源时,就会导致死锁的发生。在死锁情况下,各个线程都无法继续向前执行,导致程序无法继续运行。
死锁的四个条件?
- 互斥条件:线程对资源的访问是排他的,即一次只能有一个线程访问资源。
- 请求与保持条件:线程可以保持自己已经持有的资源,并且可以请求新的资源。
- 不剥夺条件:资源只能在线程释放之后才能被其他线程获取,不能被其他线程强制剥夺。
- 循环等待条件:形成等待环路,即多个线程之间形成一种循环等待资源的关系。
如何避免死锁?
破坏死锁的四个条件即可:
- 破坏互斥条件:无法被破坏,因为锁就是通过互斥来解决线程安全问题
- 破坏请求与保持条件:一次申请所有需要的资源
- 破坏不可剥夺条件:如果线程已占用部分资源,且他还要申请其他资源,如果申请不到,就主动释放它自己占有的资源
- 破坏循环等待条件:按照顺序申请资源,释放资源则逆序
ps:以下是我整理的java面试资料,密码是obht,感兴趣的可以看看。最后,创作不易,觉得写得不错的可以点点关注!
链接:https://www.yuque.com/u39298356/uu4hxh?# 《Java面试宝典》