查看完整视频
评论可见

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

积分观看

您支付积分,方可查看完整视频

{{user.role.value}}
付费视频

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

¥{{user.role.value}}
专属视频

只允许以下等级用户查看该视频

升级
会员专享

线程死锁详解

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

这节课重点会谈到以下几点:

  • 什么是线程死锁?
  • 死锁如何产生?
  • 如何避免线程死锁?

什么是死锁

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

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

 

死锁的例子

隐藏内容,您需要满足以下条件方可查看
End

课后作业

1.什么是死锁?
2.死锁如何产生?如何来避免?
3.最后请写出一个死锁的源码例子?

请把你的答案写到问答区域,一课一练。(输出是最好的学习:每一次输出都会让你离目标更进一步)

5:并发队列

并发队列:阻塞与非阻塞队列详解

2020-7-28 18:25:13

2:并发锁

深入ReentrantReadWriteLock的实现原理

2020-7-10 17:08:18

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

  2. 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){
    //具体的业务代码

    }
    }
    }
    }

    • ✗棒棒的✗

个人中心
今日签到
搜索