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 :
Lorsque je lance mon application, j'attrape a chaque cette erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); } }
Auriez-vous une idée de ce qui ne tourne pas rond?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
Merci d'avance pour votre aide!
Partager