7.Java线程死锁及解决方案

本文详细解释了Java线程死锁的概念,并通过一个交通堵塞的实例阐述了死锁产生的四个必要条件:互斥条件、请求与保持条件、不剥夺条件和循环等待条件。同时,提供了一个简单的Java代码示例来演示死锁情况,并讨论了四种常见的死锁解决方案,包括打破互斥条件、不可抢占条件、一次性申请所有资源以及避免资源申请环路。
摘要由CSDN通过智能技术生成

Java线程死锁及解决方案

要了解线程死锁,首先要明白什么是死锁

死锁

通俗点讲:死锁就是两个或两个以上的进程或线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。



用简单一点的例子来说吧


比如这个交通堵塞的例子,从图中可以看到四个方向行驶的汽车互相阻塞,如果没有任何一个方向的汽车退回去,那么将形成一个死锁

上述图中有产生死锁的四个原因:

1.互斥条件:一个资源每次只能被一个线程使用。图上每条路上只能让一个方向的汽车通过,故满足产生死锁的条件之一

2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。可以看出,图上每个方向的汽车都在等待其他方向的汽车撤走,故满足产生死锁的条件之二

3.不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。这里假设没有交警,那么没有人能强行要求其他方向上的汽车撤离,故满足产生死锁的条件之三

4.循环等待条件:若干进程或线程之间形成一种头尾相接的循环等待资源关系。这个在图中很直观地表达出来了




死锁Java代码小例子

[html] view plain copy

1.  package huaxin2016_9_9;  

2.    

3.  public class ThreadDeadlock {  

4.      public static void main(String[] args) throws InterruptedException {  

5.          Object obj1 = new Object();  

6.          Object obj2<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值