Java中是否有InitializeCriticalSectionWithSpinCount的类似物?它实现了hybrid mutex。我看到一个问题,看到在LockSupport.park()方法中有太多的线程花费时间,同时又用ReentrantLock或sync锁定了计算密集型代码的非常短的部分(被锁定的代码几乎无法测量单个内核上总运行时间的一部分)。这是一个对我的情况有很大帮助的课程,我想知道我是否走错了路。
public class ReentrantLockWithSpin extends ReentrantLock {
private final int _spinCount;
ReentrantLockWithSpin() {
_spinCount = 1000;
}
ReentrantLockWithSpin(int spinCount) {
_spinCount = spinCount;
}
@Override
public void lock() {
for (int spin = 0; spin != _spinCount; spin++) {
if (super.tryLock())
return;
Thread.yield();
}
super.lock();
}
}