可重入读写锁是可重入锁功能的增强。
可重入锁分为读锁和写锁,他也可以完成可重入锁的功能,但对锁粒度进行了细分。
比如,有个功能我们使用可重入锁完成了,这个功能我们用可重入锁的写锁同样能完成(读锁不能)。
但假如有个功能,我们要区分读和写,因为有时候多线程读完全没必要互斥。这时候就需要用到可重入读写锁,提高程序的效率
LockTest.java
import java.util.concurrent.locks.ReentrantLock;
/**
* 可重入锁
*/
public class LockTest {
ReentrantLock Lock = new ReentrantLock();
public void a(){
Lock.lock();
System.out.println(Lock.getHoldCount());
dosomething();
Lock.unlock();
System.out.println(Lock.getHoldCount());
}
public void b(){
Lock.lock();
Lock.unlock();
System.out.println(Lock.getHoldCount());
}
public void dosomething(){
Lock.lock();
System.out.println(Lock.getHoldCount());
Lock.unlock();
System.out.println(Lock.getHoldCount());
}
public static void main(String[] args) throws InterruptedException {
LockTest l = new LockTest();
l.a();
l.b();
}
}
运行结果:
1
2
1
0
0