美文网首页
java可重入锁

java可重入锁

作者: xtsylc | 来源:发表于2018-06-05 11:04 被阅读0次

可重入概念:

   一个线程去请求其他线程所持有的锁时,发出请求的线程就会发生阻塞。

   如果一个线程试图去请求一个已经由他自己持有的锁的时,并且该锁是可重入的,则请求就会成功。

   重入意味着获取锁的粒度是线程,而不是调用。重入避免了一些死锁情况的发生。

java的可重入锁:

   synchronized:可重入锁;

   java.util.concurrent.locks.ReentrantLock:可重入锁;

可重入锁的一种实现方式:

   每个锁关联一个计数器和一个持有者对象。计数器为0,则该锁没有被持有。

   如果某个线程请求一个空闲锁,则jvm记录锁的持有者,并且将计数器置为1。

   该线程再次请求获得该锁时,计数器加一。

   当线程释放一次锁,计数器减一,直到计数器为0,则最终释放锁。

可重入锁的两种使用例子:

例子1:

   public class Example {
         public synchronized void lock1() {
                System.out.println("进入lock1");
          }

          public synchronized void lock2() {
                System.out.println("进入lock2");
                 lock1();
           }

          public static void main(String[] args) {
                new Example().lock2();
           }
     }

例子2:

   public class Widget {
         public synchronized void dosomething() {
                System.out.println("widget do something");
          }
    }
   public class LoggerWidget extends Widget {
         public synchronized void dosomething() {
               System.out.println("LoggerWidget do something");
               super.dosomething();
         }
        public static void main(String[] args) {
              new LoggerWidget().dosomething();
        }
   }

例子1说明:

   例子1很好理解,同一个实例的两个方法,可重入显然获得的是同一个对象。

例子2说明:

   该例子可能会有疑惑。

   当线程调用LoggerWidget的dosomething方法的时候,取得LoggerWidget对象锁。

   方法中调用super.dosomething方法,调用者依然是当前对象,即LoggerWidget对象。因此进入
   super.dosomething方法获得锁依然是LoggerWidget对象锁,这里体现了锁的可重入性。

总结:

  对于java锁来说,锁的持有者是线程,锁本身可以认为是对象。

相关文章

  • java可重入锁

    可重入概念: java的可重入锁: 可重入锁的一种实现方式: 可重入锁的两种使用例子: 例子1: 例子2: 例子1...

  • 使用Redisson实现分布式锁

    1. 可重入锁(Reentrant Lock) Redisson的分布式可重入锁RLock Java对象实现了ja...

  • Java可重入锁

  • (转)Java中的几种锁机制

    出自:Java中的几种锁机制今天跟着blog整理一下几种锁,比如说 乐观锁和悲观锁,可重入锁和不可重入锁,自旋锁…...

  • Java - 可重入锁ReentrantLock简单用法

    Java - 可重入锁ReentrantLock简单用法 Java 中显示锁的借口和类主要位于java.util....

  • Java中的锁

    java中的锁按照不同的分类方法,太多了,乐观锁/悲观锁,可重入锁/不可重入锁,有些第一遇到的话,可能还有点懵。刚...

  • Java锁

    为解决程序中多个进程和线程对资源的抢占问题,在 Java 中引入了锁的概念 公平锁/非公平锁、可重入锁/不可重入锁...

  • ReentrantLock 源码分析

    锁的基本概念 可重入锁 Reentrant 就是可重入的意思,如果锁具备可重入性,则称作为可重入锁。像synchr...

  • 记一次面试

    1,java锁,可重入锁,偏向锁,自旋锁 2,spring事务隔离级别,传递特性 3,hashmap,conrre...

  • 锁 | 内置锁和手动锁的区别

    在Java中,常见的锁有二种:synchronized(内置锁)和ReentrantLock(手动锁,及可重入锁)...

网友评论

      本文标题:java可重入锁

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