我是靠谱客的博主 犹豫衬衫,最近开发中收集的这篇文章主要介绍死锁和阻塞的关系,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在看并发编程的第一章的时候举出了一个死锁了的例子,感觉特别棒,于是就联想到了阻塞,我们知道在JAVA环境中,线程Thread有如下五个状态:(当然有人要说是七个状态,这个以后有机会再说)

1,新建状态

2,就绪状态

3,运行状态

4,阻塞状态

5,死亡状态

所以说在JAVA程序运行中阻塞是一种常见的运行状态,那么首先阻塞是什么?

在我理解,阻塞就是由于等待资源而引起的程序暂停,只不过有的暂停能缓回来程序继续运行,有的暂停缓不回来,那么就变成了死锁。

下面是找的网上的俩图方便理解:

死锁:资源互不相让,具体可以看上一篇文章的代码例子。


阻塞:由于资源短缺,而造成的部分程序暂停等待


最后附上死锁的官方解释条件:

死锁:
1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。
2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
4)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。



最后

以上就是犹豫衬衫为你收集整理的死锁和阻塞的关系的全部内容,希望文章能够帮你解决死锁和阻塞的关系所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部