Есть ли в Java аналог InitializeCriticalSectionWithSpinCount ? Он реализует гибридный мьютекс . У меня проблема с отображением слишком большого количества потоков, тратящих время в методе LockSupport.park (), в то время как блокировка очень коротких частей кода с интенсивными вычислениями выполняется либо с помощью ReentrantLock, либо с синхронизацией (блокируемый код отнимает малозаметную часть общего времени выполнения на одном ядре). Вот класс, который значительно помогает моему делу, интересно, если я выбрал неправильный путь.
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();
}
}