美文网首页
锁的可重入性Reentrancy理解

锁的可重入性Reentrancy理解

作者: Mr_Editor | 来源:发表于2020-06-30 14:41 被阅读0次
    • 锁争用

    当一个线程请求其他线程已经占有的锁时,请求线程将被阻塞。synchronized是reentrancy lock ,当线程在试图获得它自己占有的锁时,请求会成功。

    • 可重入性

    reentrancy 可重入意味着在请求锁时是基于“每线程(per-thread)”,而不是基于“每调用(per-invocation)”。

    public class ReentrancyDemo{
      public synchronized void test1(){
        //.....业务代码
        test2();      //方法test2可执行,如果synchronized 不可重入,会产生死锁
      }
      public synchronized void test2(){
        //...业务代码
      }
    
    }
    
    • 重入性实现原理

    reentrancy 的实现是通过为每个锁关联一个请求计数器(acquisition count)和一个占有它的线程。计数器为0时,认为锁是未被占有的。线程请求一个未被占有的锁时,JVM将记录锁的占有者(占有线程),并将请求计数设置为1。如果同一线程再次请求这个锁,计数将递增;每次占用线程退出同步块,计数器值将递减,直到计数器达到0时,锁被释放。

    相关文章

      网友评论

          本文标题:锁的可重入性Reentrancy理解

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