Java ReentrantReadWriteLocks - как безопасно установить блокировку записи?

Я немного продвинулся в этом j2se вопросе. Явно объявив переменную oraclejdk блокировки как ReentrantReadWriteLock, а не просто concurrency ReadWriteLock (менее чем идеально, но, вероятно, в concurrency данном случае это неизбежное concurrent зло), я могу вызвать метод concurrent-programming getReadHoldCount(). Это позволяет мне получить concurrency-violation количество удержаний для reentrantreadwritelock текущего потока, и, таким openjdk образом, я могу освобождать .java блокировку чтения столько reentrantreadwritelock раз (и впоследствии повторно concurrent-programming получать то же число). Итак, это reentrantreadwritelock работает, как показал быстрый core-java и грязный тест:

final int holdCount = lock.getReadHoldCount();
for (int i = 0; i < holdCount; i++) {
   lock.readLock().unlock();
}
lock.writeLock().lock();
try {
   // Perform modifications
} finally {
   // Downgrade by reacquiring read lock before releasing write lock
   for (int i = 0; i < holdCount; i++) {
      lock.readLock().lock();
   }
   lock.writeLock().unlock();
}

Тем не менее, это jdk лучшее, что я могу сделать? Он concurrency не выглядит изящным, и я concurrency все еще надеюсь, что есть concurrent-programming способ справиться с этим oraclejdk менее "ручным" способом.

java

concurrency

reentrantreadwritelock

2022-10-20T09:22:14+00:00
Вопросы с похожей тематикой, как у вопроса:

Java ReentrantReadWriteLocks - как безопасно установить блокировку записи?