java开发怎么防止死锁?产生死锁要什么条件?

在开发java中,我们会遇到死锁,死锁就是指多个进程在运行过程中因争夺资源而造成的一种僵局,而如果大家不及时解决,肯定会影响工作效率,那java开发怎么防止死锁?下面来我们就来给大家讲解一下。

下面是一个多线程死锁的例子

java开发怎么防止死锁?产生死锁要什么条件?.jpg

输出

thread1 get lock1

thread2 get lock2

两个线程相互得到锁1,锁2,然后线程1等待线程2释放锁2,线程2等待线程1释放锁1,两者各不相互,这样形成死锁。

避免和解决死锁问题可以参考以下方法:

1、按顺序加锁

上个例子线程间加锁的顺序各不一致,导致死锁,如果每个线程都按同一个的加锁顺序这样就不会出现死锁。

2、获取锁时限

每个获取锁的时候加上个时限,如果超过某个时间就放弃获取锁之类的。

3、死锁检测

按线程间获取锁的关系检测线程间是否发生死锁,如果发生死锁就执行一定的策略,如终断线程或回滚操作等。

产生死锁要什么条件?

死锁产生的4个必要条件:

1、互斥条件:进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某 资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。

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

3、请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。

4、循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被 链中下一个进程所请求。

死锁场景,其实还有一些更令人头疼的死锁,

产生死锁是需要这几个条件的,如果条件不成立,也不会产生死锁,不过大家遇到死锁不要着急,可以按照以上的方法去解决,最后大家如果想要了解更多java入门知识,敬请关注奇Q工具网。

推荐阅读:

java测试工程师工作流程是怎样的?要掌握什么?

一个简单的java程序如何编写?Java简易计算器程序编写

java写完程序能用cmd运行吗?Java写程序用什么软件?