可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。
在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁,之所以设计成可重入锁是为了避免死锁
package com.mercurylake.test.lock;
import java.util.concurrent.locks.ReentrantLock;
public class TL {
ReentrantLock rt=new ReentrantLock();
public static void main(String[] args) {
TL t=new TL();
t.a();
}
public void a(){
rt.lock();
try{
System.out.println("a..begin");
b();
System.out.println("a..end");
}finally{
rt.unlock();
}
}
public void b(){
rt.lock();
try{
System.out.println("b..begin");
System.out.println("b..end");
}finally{
rt.unlock();
}
}
}
输出结果:a..begin;b..begin;b..end;a..end