视频课程
小黑屋思过中,禁止观看!
评论并刷新后可见

您需要在视频最下面评论并刷新后,方可查看完整视频

视频课程
立即观看
付费视频

您支付费用,方可查看完整视频

¥{{user.role.value}}
课程视频
开始学习
会员专享

视频合集

死锁如何避免?解决策略有哪些?

  • 课程笔记
  • 问答交流

死锁,这也是大厂经常面试的考点,也需要掌握。

为了助大家掌握好死锁,本节课我会重点讲解以下3点:

1.什么是线程死锁?

2.死锁如何产生?

3.如何避免线程死锁?

什么是死锁

线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。

当线程进入对象的 synchronized 代码块时,便占有了资源,直到它退出该代码块或者调用 wait 方法,才释放资源,在此期间,其他线程将不能进入该代码块。当线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。
死锁如何避免?解决策略有哪些?-mikechen

 

死锁的例子

评论交流
  1. 路正银

    1、线程死锁是指两个或者多个线程互相持有对方所需要的资源,导致这些线程处于互相等待状态,无法前往执行。
    2、死锁产生的原因是,一、当前线程拥有其他线程需要的资源,二、当前线程等待其他线程已拥有的资源,三、都不放弃自己拥有的资源
    避免死锁的策略有两个,一、所有线程按照确定的顺序获取锁,二、加锁时限(超时放弃)
    3、
    public class DeadLock {
    private final Object a = new Object();
    private final Object b = new Object();

    public void abLock(){
    synchronized(a){
    synchronized(b){
    //具体的业务代码

    }
    }
    }

    public void baLock(){
    synchronized(b){
    synchronized(a){
    //具体的业务代码

    }
    }
    }
    }

  2. JansenZhang

    1.线程死锁是指两个或多个线程相互持有对方需要的锁,导致这些都获取不到需要的锁,从而引起线程的永久等待无法继续执行的现象。
    2.避免死锁一方面可以将所有线程对锁的获取的时序保持一致,另一方面可以给线程获取锁的操作设置超时时间,如果到达时限还未获取到锁,则将当前拥有的锁释放,等待随机一段时间后重试。