美文网首页
Java死锁之释放锁

Java死锁之释放锁

作者: touch_The_Sky | 来源:发表于2018-11-07 11:46 被阅读0次

虽然我们在编程的时候极力避免产生死锁,但是由于客观因素的存在我们很难保证百分百不发生死锁。所以如果发生了死锁我们应该采取适当的措施,让相互等待的双方或多方在等待一定时间无果后释放掉所占有的资源重新去竞争,防止死锁一直持续下去。

我们先来看看Java中什么情况下会释放锁

  1. 对于synchronized执行完同步方法或者代码块,就会释放锁。对于Lock,正常执行到unlock方法就会释放锁
  2. 对于synchronized在执行同步方法或者代码块的过程中,遇到异常而导致线程终止,锁也会被释放。但是对于Lock遇到异常并不会释放锁,所以必须在finally代码块中手动释放锁
  3. 对于synchronized在执行同步方法或者代码块的过程中,执行了锁所属对象的wait()方法,这个线程会释放锁,进入对象的等待池。

4.对于Lock ,在执行同步方法或者代码块的过程中,执行了锁所属对象的await()方法,这个线程会释放锁。
PS:在下面情况下,线程是不会释放锁的:

  1. 调用Thread.sleep()方法,当前线程放弃CPU,开始睡眠,在睡眠中不会释放锁*
  2. 调用Thread.yield()方法,当前线程放弃CPU,但不会释放锁(官方已警告不要使用此方法)
  3. 调用当前线程对象的suspend()方法,当前线程被暂停,但不会释放锁(官方已警告不要使用此方法)

相关文章

  • Java死锁之释放锁

    虽然我们在编程的时候极力避免产生死锁,但是由于客观因素的存在我们很难保证百分百不发生死锁。所以如果发生了死锁我们应...

  • 死锁与问题排查

    本篇文章从Java线程、锁层面去考虑考虑死锁。 死锁:多个线程,彼此持有对方需要的锁资源,谁也不肯释放,谁也无法进...

  • 多线程-死锁

    概念: 两个线程相互等待对方释放锁,造成死锁。 示例: 普通java类: public class POJO{ ...

  • 003 线程活跃性 | 死锁 | 活锁 | 饥饿 | 无锁

    死锁 两个或多个线程相互等待对方释放锁,则会出现死锁现象。java虚拟机没有检测,也没有采用措施来处理死锁情况,所...

  • Mysql - 死锁

    Mysql - 死锁 死锁,就是产生了循环等待链条,我等待你释放锁,你却等待我释放锁,我们都相互等待,谁也不释放自...

  • Synchronized关键字详解2(对非object持锁)

    4.死锁:同步方法容易造成死锁。Java线程死锁是一个经典的多线程问题,因为不同的线程都在等待根本不可能被释放的锁...

  • JAVA死锁排查-性能测试问题排查思路

    死锁原因 Java发生死锁的根本原因是:在申请锁时发生了交叉闭环申请。即线程在获得了锁A并且没有释放的情况下去申请...

  • 性能测试之JVM的故障排查-死锁

    死锁原因 Java发生死锁的根本原因是:在申请锁时发生了交叉闭环申请。即线程在获得了锁A并且没有释放的情况下去申请...

  • 死锁

    在JAVA编程中,有3种典型的死锁类型: 静态的锁顺序死锁 动态的锁顺序死锁 协作对象之间发生的死锁 静态的锁顺序...

  • Java concurrency《防止死锁》

    Java concurrency《防止死锁》 常见预防死锁的办法 有顺序的锁 具有超时时间的锁 死锁的检测 有顺序...

网友评论

      本文标题:Java死锁之释放锁

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