ReentrantLock重入锁
重入锁,也叫做递归锁,指的是同一线程外层函数获得锁之后 ,内层递归函数仍然可以获取该锁的代码,但不受影响。
重入锁最大作用是避免死锁。
import java.util.concurrent.locks.ReentrantLock;/**
* lock.getHoldCount()方法:只能在当前调用线程内部使用,不能再其他线程中使用
* 那么我可以在m1方法里去调用m2方法,同时m1方法和m2方法都持有lock锁定即可 测试结果holdCount数递增
*
*/
public class TestHoldCount {
//重入锁
private ReentrantLock lock = new ReentrantLock();
public void m1(){
try {
lock.lock();
System.out.println(Thread.currentThread().getName() + " " + Thread.currentThread().getId());
System.out.println("进入m1方法,holdCount数为:" + lock.getHoldCount());
//调用m2方法
m2();
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
System.out.println("M1 unlock后,holdCount数为:" + lock.getHoldCount());
}
}
public void m2(){
try {
lock.lock();
System.out.println(Thread.currentThread().getName() + " " + Thread.currentThread().getId());
System.out.println("进入m2方法,holdCount数为:" + lock.getHoldCount());
} catch (Exception e) {
e.printStackTrace();
} finally {
lock.unlock();
System.out.println("M2 unlock后,holdCount数为:" + lock.getHoldCount());
}
}
public static void main(String[] args) {
TestHoldCount thc = new TestHoldCount();
thc.m1();
}
}
执行结果:(内层的先释放锁,外层后释放锁)
以上是 ReentrantLock重入锁 的全部内容, 来源链接: utcz.com/z/517105.html