mariolpantunes:
Je l'ai déjà recherché cette erreur ici, mais je pense que mon morceau de code semble correct:
- Je gagne le verrou en dehors du try..finally
- J'ai un déverrouillage dans la section enfin
- Je ne ai essayé d'attendre la condition dans la serrure.
- Imprimer même si le verrouillage actuel est maintenu par ce fil et il retourne vrai.
Voici un extrait du code, si j'essayé d'exécuter le code, je reçois un java.lang.IllegalMonitorStateException: thread courant n'est pas propriétaire. L'erreur est dans la méthode cond.wait ().
public void takeARest() {
lock.lock();
try {
while (disembark < totalPassengers) {
System.err.printf("Held by %s%n",lock.isHeldByCurrentThread());
cond.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
Des idées?
k5_:
Pour que vous voulez Condition.await()
.
Object.wait()
est une autre méthode qui nécessite de tenir l'écran de l'objet ( synchornized(cond){}
autour de l'appel)
Donc:
public void takeARest() {
lock.lock();
try {
while (disembark < totalPassengers) {
System.err.printf("Held by %s%n",lock.isHeldByCurrentThread());
cond.await();
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}