线程死锁和堵塞

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

1,新建状态

2,就绪状态

3,运行状态

4,阻塞状态

5,死亡状态

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

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

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

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

线程死锁和堵塞_第1张图片

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

线程死锁和堵塞_第2张图片

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

死锁:
1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。
2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
4)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。
————————————————
版权声明:本文为CSDN博主「和尚要吐槽」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liqinglin06/article/details/52039510

你可能感兴趣的:(线程)