演示下ReentrantLock的可重入效果

示例代码

public class B {
    //定义一个ReentrantLock类型的锁
    private final Lock lock = new ReentrantLock();

    public int getValue(int value) {
        try {
            System.out.println("进入getValue方法,准备获取锁");
            lock.lock();
            System.out.println("getValue获得了锁");
            return value;
        } finally {
            lock.unlock();
            System.out.println("getValue释放了锁");
        }
    }

    public int addValue(int value) {
        try {
            System.out.println("进入addValue方法,准备获取锁");
            lock.lock();
            System.out.println("addValue获得了锁");
            return value + getValue(value);
        } finally {
            lock.unlock();
            System.out.println("addValue释放了锁");
        }
    }
}

写个main方法做下测试:

  public static void main(String[] args) throws Exception {
        B b = new B();
        int result = b.addValue(100);
        System.out.println("输出结果为" + result);
    }

输出结果如下:

在这里插入图片描述

总结

可以发现,进入addValue方法后,已经先加了锁,但是在没有释放锁的时候,去调用getValue方法时,getValue方法一样能获取到锁,说明最后ReentrantLock锁是可重入的,最后再按顺序释放锁。

原创文章 358 获赞 387 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/105673708