Java 8 Reentrant résultats de verrouillage et d'état dans IllegalMonitorStateException: thread courant n'est pas propriétaire

mariolpantunes:

Je l'ai déjà recherché cette erreur ici, mais je pense que mon morceau de code semble correct:

  1. Je gagne le verrou en dehors du try..finally
  2. J'ai un déverrouillage dans la section enfin
  3. Je ne ai essayé d'attendre la condition dans la serrure.
  4. 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();
    }
}

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=361190&siteId=1
conseillé
Classement