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

回到顶部