死锁

死锁是多个进程或线程在运行中由于竞争不可剥夺资源而造成的一种互相等待,若无外力作用,这些进程或线程都将无法向前推进。

实例:

实验室里只有一台打印机和一台输入设备,进程P1正占用输入设备,同时又提出使用打印机的请求,但此时打印机正被进程P2 所占用,而P2在未释放打印机之前,又提出请求使用正被P1占用着的输入设备。这样两个进程相互无休止地等待下去,均无法继续执行,此时两个进程陷入死锁状态。

死锁产生的原因:

1) 不可剥夺的系统资源

2 )不合理的进程推进顺序

死锁产生的必要条件

1)互斥条件:在一段时间内某资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。

2)不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己主动释放。

3)请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,

4)循环等待条件

java中死锁的监测

1 观察代码中的同步代码块,调用的同步方法和锁

2 在运行阶段试着对线程进行转储,在Linux中通过命令“kill -3”,在应用程序日志文件中打印所有线程的状态,而从而判断哪个线程被锁定在哪个对象上。

参考:https://blog.csdn.net/jinguangliu/article/details/78591477

原文地址:https://www.cnblogs.com/moxia1234/p/11400465.html