starfred
20-07-2011, 17:32
Vengo subito al dunque:
Ho una classe dove eseguo (pseudocodice)
class sem{
ReentrantLock lock;
...
void blocca(){
....
lock.lock();
...
}
void sblocca(){
....
lock.unlock();
...
}
}
il problema è che, poiché la classe è condivisa da più thread, quando fanno la unlock viene sollevata l'eccezione
java.lang.IllegalMonitorStateException
at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:127)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1175)
at java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:431)
Da quel che ho capito il problema nasce dal fatto che il thread che ha eseguito la lock non è quello che esegue la unlock, almeno così io ho capito.
Come faccio a risolvere? :D
ciao e grazie
Ho una classe dove eseguo (pseudocodice)
class sem{
ReentrantLock lock;
...
void blocca(){
....
lock.lock();
...
}
void sblocca(){
....
lock.unlock();
...
}
}
il problema è che, poiché la classe è condivisa da più thread, quando fanno la unlock viene sollevata l'eccezione
java.lang.IllegalMonitorStateException
at java.util.concurrent.locks.ReentrantLock$Sync.tryRelease(ReentrantLock.java:127)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.release(AbstractQueuedSynchronizer.java:1175)
at java.util.concurrent.locks.ReentrantLock.unlock(ReentrantLock.java:431)
Da quel che ho capito il problema nasce dal fatto che il thread che ha eseguito la lock non è quello che esegue la unlock, almeno così io ho capito.
Come faccio a risolvere? :D
ciao e grazie