【发布时间】:2021-06-20 11:00:21
【问题描述】:
ReentrantLock 使用什么样的机制?我试图了解它会在 Java Flight Recording 下显示的位置。我的预期是锁会在 Java Monitor Wait 部分下,但事实并非如此。
背景:
我正在尝试通过捕获 java 飞行记录来调试有问题的 ReentrantLock。锁本身很简单:
public class SomeClass {
private final ReentrantLock lock = new ReentrantLock();
public void capture() {
boolean exclusive = someFunction();
try {
if (exclusive) {
lock.lock();
}
// critical code
} finally {
if (exclusive) {
lock.unlock();
}
}
}
}
在我的实验中,我的应用程序应该调用 capture 函数 200 万次,在某些情况下,锁会根据 someFunction() 被激活。由于没有得到预期的结果,我将函数硬编码为始终为真,但在我的记录中没有观察到 200 万个 Java Monitor Waiting 事件。
【问题讨论】:
-
if (exclusive { lock.lock(); }如果块缺少括号,可能是问题 -
@sanjeevRm 这只是为了说明锁的工作原理而编写的快速 sudo 代码。我已经更新了代码。
标签: java debugging locking jfr