示例代码
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锁是可重入的,最后再按顺序释放锁。