[英]How is `hold count` value useful in Reentrant Lock?
重入锁定( https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantLock.html )具有一个功能,用于说明特定线程的锁定强度,该线程基于'保持计数'的值。 当线程获取锁定时它被启动,并且每当它重新获取锁定时值增加。 每次线程调用锁上的unlock方法时,该值都会递减。
单个线程一次可以是Reentrant Lock的所有者,因此简单的boolen标志使得mcuh感觉而不是整数计数。 已经是锁的所有者的线程只能重新获取它,所以计算接缝数量不多。 (任何)使用。
保持计数的用处是什么? 有什么用例? 一个这样的用例可以是检查当前线程是否持有锁(保持计数值> 0)。 但是有一些不同的API,比如isHeldByCurrentThread()
。
假设您有一个包含锁定块的方法,您可以从不同的地方调用它。 根据它所持有的锁定计数,该方法应该做不同的事情。 然后你可以使用getHoldCount
。
import java.util.concurrent.locks.ReentrantLock;
public class Example {
ReentrantLock lock = new ReentrantLock();
void method1() {
lock.lock();
try {
if (lock.getHoldCount() == 1) {
System.out.println("call method1 directly");
} else if (lock.getHoldCount() == 2) {
System.out.println("call method1 by invoking it inside method2");
}
} finally {
lock.unlock();
}
}
void method2() {
lock.lock();
try {
method1();
} finally {
lock.unlock();
}
}
public static void main(String[] args) {
Example example = new Example();
example.method1(); // call method1 directly
example.method2(); // call method1 by invoking it inside method2
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.