Problème ReentrantReadWriteLock: IllegalMonitorStateException
Bonjour,
J'ai un problème lié à l'usage des ReentrantReadWriteLock. Pourriez-vous m'aider?
Voici mon problème : voulant protéger l'accès multi-thread à un objet en écriture mais pas en lecture (pour des raisons de performances), j'ai utilisé les ReentrantReadWriteLock de Java. J'ai utilisé une implémentation quasi identique à celle de la doc :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public Map<String,String> getTranslationDictionary(String language){
readLock.lock();
try{
if (translationCache==null) {
readLock.unlock();
writeLock.lock();
if (translationCache==null) reloadCache();
readLock.lock();
writeLock.unlock();
}
return translationCache.get(language);
} finally {
readLock.unlock();
}
} |
Lorsque je lance mon application, j'attrape a chaque cette erreur :
Code:
1 2 3 4 5 6
|
java.lang.IllegalMonitorStateException
at java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryReleaseShared(ReentrantReadWriteLock.java:275)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.releaseShared(AbstractQueuedSynchronizer.java:1215)
at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.unlock(ReentrantReadWriteLock.java:576)
at be.approach.brooklyn.logic.impl.ResourceBundleLogicImpl.getTranslationDictionary(ResourceBundleLogicImpl.java:69) |
Auriez-vous une idée de ce qui ne tourne pas rond?
Merci d'avance pour votre aide!