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
Java ReentrantReadWriteLocks - как безопасно установить блокировку записи?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.