美文网首页
多线程中的死锁

多线程中的死锁

作者: superpf | 来源:发表于2019-05-24 16:25 被阅读0次

就是两个线程各自持有一个锁,又想去获取对方的锁(锁中套锁)。自己的持有的锁还没执行完,又要执行另一段被锁的代码。

当一个线程永远地持有一个锁,并且其他线程都尝试去获得这个锁时,那么它们将永远被阻塞,这个我们都知道。如果线程A持有锁L并且想获得锁M,线程B持有锁M并且想获得锁L,那么这两个线程将永远等待下去,这种情况就是最简单的死锁形式。

例子:两个方法中一定让线程睡一会,不然一个线程直接执行完了,另一个线程还没开始执行尴尬了

避免死锁的方式

既然可能产生死锁,那么接下来,讲一下如何避免死锁。

1、让程序每次至多只能获得一个锁。当然,在多线程环境下,这种情况通常并不现实

2、设计时考虑清楚锁的顺序,尽量减少嵌在的加锁交互数量

3、既然死锁的产生是两个线程无限等待对方持有的锁,那么只要等待时间有个上限不就好了。当然synchronized不具备这个功能,但是我们可以使用Lock类中的tryLock()方法去尝试获取锁,这个方法可以指定一个超时时限,在等待超过该时限之后变回返回一个失败信息

相关文章

  • 照本宣科的问题

    3条你遵循的多线程最佳实践三条最佳实践我觉得大多数Java程序员都应该遵循: 如何避免死锁?Java多线程中的死锁...

  • Java自学-多线程 死锁

    Java 演示多线程死锁 当业务比较复杂,多线程应用里有可能会发生死锁 步骤 1 : 演示死锁 线程1 首先占有对...

  • 多线程中的死锁

    就是两个线程各自持有一个锁,又想去获取对方的锁(锁中套锁)。自己的持有的锁还没执行完,又要执行另一段被锁的代码。 ...

  • Java多线程-死锁的出现和解决

    Java多线程-死锁什么是死锁? 死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释...

  • 18 多线程死锁

    多线程死锁产生的原因:在同步中嵌套同步,会出现死锁的现象。 查找到当前JVM环境变量C:\Program File...

  • 死锁 GCD 多线程

    死锁 GCD 多线程 Ios - LDSmallCat - 博客园 Ios中GCD死锁困扰很多人,分享一点个人经...

  • Java并发案例01---多线程之死锁

    多线程之死锁案例一

  • 死锁 & 银行家算法

    死锁是多线程环境中由于对资源竞争分配不合理而产生的阻塞行为,银行家算法是一种动态避免死锁的策略。 I、死锁 1.1...

  • iOS/Swift多线程之---如何避免数据竞争(Data ra

    多线程编程中, 常见的问题有 死锁Deadlock死锁指的是由于两个或多个执行单元之间相互等待对方结束而引起阻塞的...

  • Java基础之死锁

    死锁是多线程中的常见问题,那么我们就来看看死锁的相关内容。本文的要点如下: 定义 产生的条件 类型 总结 定义 死...

网友评论

      本文标题:多线程中的死锁

      本文链接:https://www.haomeiwen.com/subject/lvqnzqtx.html